1.建立memcache物件
#!/usr/bin/env python
# -*-coding:utf-8-*-
import memcache
mc = memcache.client(["192.168.31.10:11211"], debug=true) #debug為除錯引數
mc.set("foo", "123")
print mc.get("foo")
2.python使用memcache集群
python-memcached模組原生支援集群操作,其原理是在記憶體維護乙個主機列表,且集群中主機的權重值和主機在列表中出現的次數成正比.
集群memcache伺服器,python 對資料儲存在那台伺服器位置的演算法是如下
如果使用者根據如果要在記憶體中建立乙個鍵值對(如:k1 = "v1"),那麼要執行一下步驟:
集群設定方法:
#!/usr/bin/env python
# -*-coding:utf-8-*-
import memcache
mc = memcache.client([("192.168.31.10:11211", 1), ("192.168.31.7:11211", 3), ("192.168.31.7:11211", 1)], debug=true)
mc.set("foo", "abc")
print mc.get("foo")
注:集群設定中,伺服器的列表位址元素是元組了(主機位址, 權重)
3.增加資料add
對已經存在的key使用add會報異常.set方法不會.這點也是他們2的區別
#!/usr/bin/env python
# -*-coding:utf-8-*-
import memcache
mc = memcache.client([("192.168.31.10:11211", 1), ("192.168.31.7:11211", 3), ("192.168.31.7:11211", 1)], debug=true)
mc.set("foo", "abc")
print mc.get("foo")
mc.set("foo", "456")
print mc.get("foo")
mc.add("foo", "abc")
4.修改資料replace
replace 修改某個key的值,如果key不存在,則異常.
mc.replace("k1", "v2")
print mc.get("k1")
上述**中,k1的鍵是不存在的.執行replace會報如下異常
memcached: while expecting 'stored', got unexpected response 'not_stored'
non
5.設定鍵值對set和set _multi
set 設定乙個鍵值對,如果key不存在,則建立,如果key存在,則修改.
set_multi 設定多個鍵值對,如果key不存在,則建立,如果key存在,則修改.
mc.set("k1", "v1")
print mc.get("k1")
mc.set_multi()
print mc.get("k3")
執行結果
v1
v3
6.delete 和 delete_multi
delete 在memcached中刪除指定的乙個鍵值對
delete_multi 在memcached中刪除指定的多個鍵值對.引數是列表
mc.set("k1", "v1")
print mc.get("k1")
mc.delete("k1")
print mc.get("k1")
mc.set_multi()
print mc.get("k3")
mc.delete_multi(["k3"])
print mc.get("k3")
執行結果
v1
none
v3none
mc.set("k1", "abc")
print mc.get("k1")
mc.prepend("k1", "pre--")
print mc.get("k1")
print mc.get("k1")
執行結果
abc
pre--abc
8.自增或者自減值decr 和 incr
incr 自增,將memcached中的某乙個值增加 n ( n預設為1 )
decr 自減,將memcached中的某乙個值減少 n ( n預設為1 )
mc.set("k1", "10")執行結果print mc.get("k1")
mc.incr("k1")
print mc.get("k1")
mc.incr("k1", 10)
print mc.get("k1")
mc.decr(("k1"))
print mc.get("k1")
10
1121
20
9.避免髒資料產生的獲取和設定方法
如**商品剩餘個數,假設改值儲存在memcache中,product_count = 900
a使用者重新整理頁面從memcache中讀取到product_count = 900
b使用者重新整理頁面從memcache中讀取到product_count = 900
如果a、b使用者均購買商品
a使用者修改商品剩餘個數 product_count=899
b使用者修改商品剩餘個數 product_count=899
如此一來快取內的資料便不在正確,兩個使用者購買商品後,商品剩餘還是 899
如果使用python的set和get來操作以上過程,那麼程式就會如上述所示情況!
如果想要避免此情況的發生,只要使用 gets 和 cas 即可,如:
import memcache
import time
mc = memcache.client([("192.168.31.10:11211", 1), ("192.168.31.7:11211", 3), ("192.168.31.7:11211", 1)], debug=true, cache_cas=true)
print mc.gets("foo")
print mc.cas_ids
time.sleep(10)
mc.cas("foo", '999')
print mc.cas_ids
2個這客戶端同時修改同乙份資料時.會報如下錯誤
999
memcached: while expecting 'stored', got unexpected response 'exists'
注:cache_cas=true 一定要開啟.不然無法使用上面的特性 eAccelerator與memcached的區別
歡迎各位加入群 206981178,共同學習 eaccelerator和memcached,是目前較為主流的兩個可使用在php之中的快取加速工具.eaccelerator專門為php開發,而memcached不僅僅用在php之中,其他所有的語言都可以使用.eaccelerator的主要功能 1.快取...
PHP Windows下使用Memcached擴充套件
github上發現了乙個很好用的小檔案,能夠 模擬出php memcached.dll的php memcached擴充套件。php memcached client 已知pcel有兩個memcache client的擴充套件,乙個是memcache,乙個是memcached,他們的實現方式不同,後者...
修改ThinkPHP快取為Memcache的方法
一般來說,thinkphp的預設快取方式是以file檔案方式實現的,執行時會在 runtime temp 下生成很多的快取檔案。有的情況下伺服器裝了memcached之後,需要將thinkphp的快取方式更改成memecache方式 具體操作步驟如下 在conf config.php 中新增 dat...