ตัวอย่างที่ดีของ python-memcache (memcached) ที่ใช้ใน Python? [ปิด]


91

ฉันกำลังเขียนเว็บแอปโดยใช้ Python และ web.py framework และฉันต้องใช้ memcached ตลอด

ฉันค้นหาข้อมูลทางอินเทอร์เน็ตเพื่อพยายามค้นหาเอกสารที่ดีเกี่ยวกับโมดูลpython-memcachedแต่ทั้งหมดที่ฉันพบคือตัวอย่างนี้ในเว็บไซต์ MySQLและเอกสารเกี่ยวกับวิธีการนั้นไม่ดี

คำตอบ:


145

มันค่อนข้างง่าย คุณเขียนค่าโดยใช้คีย์และเวลาหมดอายุ คุณได้รับค่าโดยใช้คีย์ คุณสามารถหมดอายุคีย์จากระบบได้

ลูกค้าส่วนใหญ่ปฏิบัติตามกฎเดียวกัน คุณสามารถอ่านคำแนะนำทั่วไปและปฏิบัติที่ดีที่สุดในหน้าแรกของ memcached

ถ้าคุณต้องการเจาะลึกจริงๆฉันจะดูที่มา นี่คือความคิดเห็นส่วนหัว:

"""
client module for memcached (memory cache daemon)

Overview
========

See U{the MemCached homepage<http://www.danga.com/memcached>} for more about memcached.

Usage summary
=============

This should give you a feel for how this module operates::

    import memcache
    mc = memcache.Client(['127.0.0.1:11211'], debug=0)

    mc.set("some_key", "Some value")
    value = mc.get("some_key")

    mc.set("another_key", 3)
    mc.delete("another_key")

    mc.set("key", "1")   # note that the key used for incr/decr must be a string.
    mc.incr("key")
    mc.decr("key")

The standard way to use memcache with a database is like this::

    key = derive_key(obj)
    obj = mc.get(key)
    if not obj:
        obj = backend_api.get(...)
        mc.set(key, obj)

    # we now have obj, and future passes through this code
    # will use the object from the cache.

Detailed Documentation
======================

More detailed documentation is available in the L{Client} class.
"""

ขอบคุณความคิดเห็นของซอร์สโค้ดมีประโยชน์มาก
โจนาธานก่อน

ฉันไม่เข้าใจว่า 'mc' คืออะไร คุณช่วยอธิบายได้ไหม?
bodacydo

9
mcเป็นวัตถุไคลเอ็นต์ Memcache ซึ่งแสดงถึงการเชื่อมต่อ memcached
moshen

4
@ Kevin混合理论คำถามทั้งหมดนี้เป็นเรื่องเกี่ยวกับหลาม memcached memcacheนั่นคือสิ่งที่ให้
Oli

1
@themiurgo โค้ดด้านบนเป็นความคิดเห็นในส่วนหัวของโค้ด python-memcachedจริง นั่นคือสิ่งที่เกิดขึ้นในปี 2009 และนั่นคือสิ่งที่ยังคงเป็นอยู่ในปัจจุบัน ความคิดเห็นตลอดยังคงบอกว่า "ต้องเป็นการแสดงสตริงของจำนวนเต็ม" หากคุณคิดว่าไม่ถูกต้องให้แจ้งข้อบกพร่องเพื่อให้พวกเขาอัปเดตเอกสาร
Oli

43

ฉันขอแนะนำให้คุณใช้pylibmcแทน

มันสามารถทำหน้าที่แทน python-memcache แบบดรอปอินได้ แต่เร็วกว่ามาก (ตามที่เขียนด้วย C) และคุณสามารถหาเอกสารที่มีประโยชน์สำหรับมันนี่

และสำหรับคำถามเนื่องจาก pylibmc ทำหน้าที่แทนแบบดรอปอินคุณยังสามารถอ้างถึงเอกสารของ pylibmc สำหรับการเขียนโปรแกรม python-memcache ของคุณ


3
โปรดทราบว่าpylibmcไม่ทำงานบน Python 3
jbg

2
แม้ว่าจะเป็นจริง แต่python-memcachedก็ไม่รองรับ Python 3 เช่นกัน pylibmc กำลังเตรียมพร้อมสำหรับการเปิดตัวพร้อมรองรับ Python 3
anthonyryan1

10
ตอนนี้ทั้งสองรองรับ Python3 แล้ว
Aidin

1
หมายเหตุเกี่ยวกับการติดตั้ง: apt-get install libmemcached-devแล้วpip install pylibmc
คริสเตียน

ปัญหาสำหรับฉันคือ pylibmc ต้องการ build-tools บน linux และติดตั้งบน windows ได้ยาก ฉันใช้สภาพแวดล้อม win / lin แบบผสมดังนั้นฉันจึงเปลี่ยนกลับไปใช้ python-memcached ด้วยเหตุผลด้านความเข้ากันได้ ปัญหาใหญ่ที่สุดคือนโยบายที่ฉันมีต่อการติดตั้ง build-tools บนเซิร์ฟเวอร์ที่ใช้งานจริงของ linux ความแตกต่างของความเร็วระหว่าง python-memcached และ pylibmc แทบจะไม่เป็นปัญหา
คริส

7

หลักการง่ายๆ: ใช้ระบบความช่วยเหลือในตัวใน Python ตัวอย่างด้านล่าง ...

jdoe@server:~$ python
Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import memcache
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'memcache']
>>> help(memcache)

------------------------------------------
NAME
    memcache - client module for memcached (memory cache daemon)

FILE
    /usr/lib/python2.7/dist-packages/memcache.py

MODULE DOCS
    http://docs.python.org/library/memcache

DESCRIPTION
    Overview
    ========

    See U{the MemCached homepage<http://www.danga.com/memcached>} for more about memcached.

    Usage summary
    =============
...
------------------------------------------

ใช้ไม่ได้อีกต่อไป 2.7.3 ไม่ได้มาพร้อมกับโมดูล memcache ที่ติดตั้งโดยค่าเริ่มต้นและลิงก์ไปยังเอกสารประกอบก็ใช้งานไม่ได้เช่นกัน
iandouglas

1
@iandouglas: สิ่งที่คุณเขียนเป็นจริงสำหรับเดเบียน 6.0.7 ของฉัน แต่ฉันต้องapt-get install python-memcacheได้รับโมดูลเท่านั้น
jfg956
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.