cd /usr/local/src wget http://memcached.org/latest tar -zxvf memcached-1.x.x.tar.gz cd memcached-1.x.x ./configure && make && make test && make install
pip install python-memcached
memcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 256 -P /export/servers/memcache/logs/memcache.pid
-p 指定端口號(默認11211) -m 指定最大使用內存大小(默認64MB) -t 線程數(默認4) -l 鏈接的IP地址, 默認是本機 -d 之後臺守護進程的方式啓動-c 最大同時鏈接數,默認是1024-P 制定memecache的pid文件
-h 打印幫助信息python
天生支持集羣:
python-memcachd模塊原生支持集羣操做,其原理是在內存維護一個主機列表,且集羣中主機的權重值和主機在列表中重複出現的次數成正比。緩存
主機 權重 1.1.1.1 1 1.1.1.2 2 1.1.1.3 1
#那麼在內存中主機列表爲:bash
host_list=['1.1.1.1','1.1.1.2','1.1.1.2','1.1.1.3',]
下面來看一個例子,python操做memcache集羣
app
mc = memcache.Client([('1.1.1.1:12000', 1), ('1.1.1.2:12000', 2), ('1.1.1.3:12000', 1)], debug=True) mc.set('k1', 'v1')
存儲命令: set/add/replace/append/prepend/casmemcached
獲取命令: get/getsspa
其餘命令: delete/stats..線程
import memcachedebug
mc = memcache.Client(['192.168.48.128:11211'], debug=True) # mc.set("foo", "bar") # ret = mc.get("foo") mc.add('k1','v1') mc.add('k1','v1') # print(ret)
replace修改某個key的值,若是key不存在,則異常。 import memcache mc = memcache.Client(['192.168.48.128:11211'], debug=True) # mc.set("foo", "bar") # ret = mc.get("foo") mc.add('k1','v1') # mc.add('k1','v1') # print(ret) mc.replace("k1", "666") print(mc.get("k1")) 結果: 666
set :設置一個鍵值對,若是key不存在,則建立,若是key存在,則修改;
set_multi:設置多個鍵值對,若是key不存在,則建立,若是key存在,則修改。code
import memcache mc = memcache.Client(['192.168.48.128:11211'], debug=True) mc.set("k10", "v10") mc.set_multi({"k11": "v11", "k12": "v12"})
set方法和add方法的區別
set = add + replaceserver
delete:在Memcached中刪除指定的一個鍵值對;
delete_multi:在Memcached中刪除指定的多個鍵值對。
import memcache mc = memcache.Client(['192.168.48.128:11211'], debug=True) # mc.set("k10", "v10") # mc.set_multi({"k11": "v11", "k12": "v12"}) # mc.delete("k10") mc.delete_multi(["k11", "k12"])
get : 獲取一個鍵值對;
get_multi:獲取多個鍵值對。
import memcache mc = memcache.Client(['192.168.48.128:11211'], debug=True) mc.set("k10", "v10") mc.set_multi({"k11": "v11", "k12": "v12"}) val = mc.get('k1') print(val) item_dict = mc.get_multi(['k11', 'k12']) print(item_dict)
append:修改指定key的值,在該值後面追加內容;
prepend:修改指定key的值,在該值前面插入內容。
import memcache mc = memcache.Client(['192.168.10.128:12000'], debug=True) mc.append('k1','after') val1 = mc.get('k1') print(val1) mc.prepend('k1','brefore') val2 = mc.get('k1') print(val2) #結果: v1afterafter breforev1afterafter
查看歷史操做
使用緩存系統共享數據資源就必然繞不開數據爭奪和髒數據(數據混亂)的問題。
假設商城某件商品的剩餘個數保存在memcache中,product_count = 900
A用戶刷新頁面從memecache中讀取到product_count = 900
B用戶刷新頁面從memecache中讀取到product_count = 900
A,B用戶均購買商品,並修改product_count的值
A修改後,product_count = 899
B修改後,product_count = 899
然而正確數字應該是898,數據就混亂了。
若是想要避免這種狀況的發生,則能夠使用 gets 和 cas
注意: 要在Client中增長cache_cas參數
import memcache mc = memcache.Client(['192.168.48.131'],cache_cas=True) mc.set('count',"100") print(mc.gets("count")) # mc.set("count", '1000') result = mc.cas("count", "99") print(result) print(mc.get("count"))