memcache基本使用

2022-03-09 21:36:15 字數 3926 閱讀 4326

一、初次使用

import

memcache

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 ...