Memcached API
- set(key,val,time=0,min_compress_len=0)
無條件鍵值對的設置,其中的time用於設置超時,單位是秒,而min_compress_len則用於設置zlib壓縮(注:zlib是提供數據壓縮用的函式庫)
- set_multi(mapping,time=0,key_prefix='',min_compress_len=0)
設置多個鍵值對,key_prefix是key的前綴,完整的鍵名是key_prefix+key, 使用方法如下
>>> mc.set_multi({'k1' : 1, 'k2' : 2}, key_prefix='pfx_') == []
>>> mc.get_multi(['k1', 'k2', 'nonexist'], key_prefix='pfx_') == {'k1' : 1, 'k2' : 2}
- add(key,val,time=0,min_compress_len=0)
添加一個鍵值對,內部調用_set()方法
- replace(key,val,time=0,min_compress_len=0)
替換value,內部調用_set()方法
- get(key)
根據key去獲取value,出錯返回None
- get_multi(keys,key_prefix='')
獲取多個key的值,返回的是字典。keys為key的列表
- delete(key,time=0)
刪除某個key。time的單位為秒,用於確保在特定時間內的set和update操作會失敗。如果返回非0則代表成功
- incr(key,delta=1)
自增變量加上delta,默認加1,使用如下
>>> mc.set("counter", "20")
>>> mc.incr("counter")
- decr(key,delta=1)
自減變量減去delta,默認減1
Python操作Memcached
前提:已安裝Memcached
linux下安裝python-memcached
apt-get install python-memcached
簡單示例
import memcache mc = memcache.Client(['127.0.0.1:12000'],debug=False) mc.set("foo","bar") value = mc.get("foo") print(value) #輸出bar
# debug=True表示運行出現錯誤時,可以顯示錯誤信息,正式環境可以不加
在python網頁應用中的示例
import memcache mc = memcache.Client(['127.0.0.1:11211'], debug=0)
memcache其實就是一個map結構,最常使用的就是兩個函數了:
- 第一個就是set(key,value,timeout),這個很簡單就是把key映射到value,timeout指的是什么時候這個映射失效
- 第二個就是get(key)函數,返回key所指向的value
對一個sql查詢,如果要對結果做緩存,可以這么做:
sql = 'select count(*) from verycd' c = sqlite3.connect('verycd.db').cursor()
#原來的處理方式
c.execute(sql)
count = c.fetchone()[0]
#現在的處理方式
from hashlib import md5 key=md5(sql) count = mc.get(key) if not count: c.execute(sql) count = c.fetchone()[0] mc.set(key,count,60*5) #存5分鍾
#md5是為了讓key分布更均勻。
refer: