一、初次使用
importmemcache
mc = memcache.client(['
192.168.252.128:11211
'], debug=true)#不寫埠用預設的
mc.set(
"foo
", "
bar"
)ret = mc.get('
foo'
)print ret
二、支援集群
如果使用者根據如果要在記憶體中建立乙個鍵值對(如:k1 = "v1"),那麼要執行一下步驟:
根據演算法將 k1 轉換成乙個數字
將數字和主機列表長度求餘數,得到乙個值 n( 0
<= n 《列表長度 )
在主機列表中根據 第2步得到的值為索引獲取主機,例如:host_list[n]
連線 將第3步中獲取的主機,將 k1 = "v1"
放置在該伺服器的記憶體中
**實現如下:
mc = memcache.client([('
1.1.1.1:11211
', 1), ('
1.1.1.2:11211
', 2), ('
1.1.1.3:11211
', 1)], debug=true)
mc.set('k1
', '
v1')
三、add增加
新增一條鍵值對,如果已經存在的 key,重複執行add操作異常import
memcache
mc = memcache.client(['
10.211.55.4:11211
'], debug=true)
mc.add('k1
', 'v1'
)#mc.add('k1', 'v2') # 報錯,對已經存在的key重複新增,失敗!!!
四、replace修改操作
replace 修改某個key的值,如果key不存在,則異常import
memcache
mc = memcache.client(['
10.211.55.4:11211
'], debug=true)
#如果memcache中存在kkkk,則替換成功,否則一場
mc.replace('
kkkk
','999
')
五、set設定乙個和set_multi設定多個
set 設定乙個鍵值對,如果key不存在,則建立,如果key存在,則修改set_multi 設定多個鍵值對,如果key不存在,則建立,如果key存在,則修改
import
memcache
mc = memcache.client(['
10.211.55.4:11211
'], debug=true)
mc.set(
'key0
', '
wupeiqi')
mc.set_multi()
六、delete刪除乙個和delete_multi刪除多個
delete 在memcached中刪除指定的乙個鍵值對delete_multi 在memcached中刪除指定的多個鍵值對
import
memcache
mc = memcache.client(['
10.211.55.4:11211
'], debug=true)
mc.delete(
'key0')
mc.delete_multi([
'key1
', '
key2
'])
七、get獲取乙個和get_mulit獲取多個
get 獲取乙個鍵值對get_multi 獲取多乙個鍵值對
import
memcache
mc = memcache.client(['
10.211.55.4:11211
'], debug=true)
val = mc.get('
key0')
item_dict = mc.get_multi(["
key1
", "
key2
", "
key3
"])
prepend 修改指定key的值,在該值 前面 插入內容
import
memcache
mc = memcache.client(['
10.211.55.4:11211
'], debug=true)
#k1 = "v1"'k1
', '
after')
#k1 = "v1after"
mc.prepend('k1
', '
before')
#k1 = "beforev1after"
九、decr自增和incr自減
incr 自增,將memcached中的某乙個值增加 n ( n預設為1 )decr 自減,將memcached中的某乙個值減少 n ( n預設為1 )
import
memcache
mc = memcache.client(['
10.211.55.4:11211
'], debug=true)
mc.set('k1
', '
777')
mc.incr('k1
')#k1 = 778
mc.incr('k1
', 10)
#k1 = 788
mc.decr('k1
')#k1 = 787
mc.decr('k1
', 10)
#k1 = 777
十、gets和cas
先聽乙個小故事:如**商品剩餘個數,假設改值儲存在memcache中,product_count = 900a使用者重新整理頁面從memcache中讀取到product_count = 900b使用者重新整理頁面從memcache中讀取到product_count = 900如果a、b使用者均購買商品
a使用者修改商品剩餘個數 product_count=899b使用者修改商品剩餘個數 product_count=899如此一來快取內的資料便不在正確,兩個使用者購買商品後,商品剩餘還是 899如果使用python的set和get來操作以上過程,那麼程式就會如上述所示情況!
如果想要避免此情況的發生,只要使用 gets 和 cas 即可,如:
import
memcache
mc = memcache.client(['
10.211.55.4:11211
'], debug=true, cache_cas=true)
v = mc.gets('
product_count')
#...
#如果有人在gets之後和cas之前修改了product_count,那麼,下面的設定將會執行失敗,剖出異常,從而避免非正常資料的產生
mc.cas('
product_count
', "
899"
)ps:本質上每次執行gets時,會從memcache中獲取乙個自增的數字,通過cas去修改gets的值時,會攜帶之前獲取的自增值和memcache中的自增值進行比較,如果相等,則可以提交,如果不想等,那表示在gets和cas執行之間,又有其他人執行了gets(獲取了緩衝的指定值), 如此一來有可能出現非正常資料,則不允許修改。
Memcache使用教程
memcached是乙個自由開源的,高效能,分布式記憶體物件快取系統。memcached是以livejournal旗下danga interactive公司的brad fitzpatric為首開發的一款軟體。現在已成為mixi hatena facebook vox livejournal等眾多服務...
Memcache使用環境
使用memcache的 一般流量都是比較大的,為了緩解資料庫的壓力,讓memcache作為乙個快取區域,把部分資訊儲存在記憶體中,在前端能夠迅速的進行訪問。那麼一般的焦點就是集中在如何分擔資料庫壓力和進行分布式,畢竟單台memcache的記憶體容量的有限的。我這裡簡單提出我的個人看法,未經實踐,權當...
php PHP操作Memcache基本函式
php php操作memcache基本函式 2 memcache 函式 memcache debug 轉換除錯輸出的開 關 memcache add server memcache close memcache connect memcache host 11211 memcache delete ...