python-memcached包使用方法

來源:互聯網
上載者:User

標籤:

本文轉載自:http://my.oschina.net/flynewton/blog/10660

將memcached.pyc拷貝到工作目錄

1 #!/usr/bin/env python2  3 import memcache4  5 mc = memcache.Client([‘127.0.0.1:12000‘],debug=0)6 mc.set("foo","bar")7 value = mc.get("foo")8 print value

輸出得到bar

 

4.Python-memcached API總結

主要方法如下:

1 @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, 使用方法如下

1   >>> mc.set_multi({‘k1‘ : 1, ‘k2‘ : 2}, key_prefix=‘pfx_‘) == []2 3   >>> 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,使用如下

1 >>> mc.set("counter", "20")  2 3 >>> mc.incr("counter")4 5 216 7 @decr(key,delta=1)

 

自減變數減去delta,預設減1

5._set方法

很多方法內部都調用了_set方法,其源碼如下:

注: memcached 的用戶端使用TCP連結與伺服器通訊, 一個運行中的memcached伺服器監視一些連接埠, 用戶端串連這些連接埠,發送命令到伺服器,讀取回應,最後關閉串連。(具體命令請參考《Memcached 協議中文版》)

 

6.python-memcached安全執行緒

python-memcached是不是安全執行緒的

答案是肯定的,為什麼我們需要安全執行緒的memcached client,因為我們的實際應用一般是多線程的模型,例如cherrypy、twisted,如果python-memcached不是安全執行緒的話,引起的問題不僅僅是並發修改共用變數這麼簡單,是外部socket連結的資料流的混亂

python-memcached怎麼實現安全執行緒的呢?查看原始碼看到

 

1 try:2     # Only exists in Python 2.4+3     from threading import local4 except ImportError:5     # TODO:  add the pure-python local implementation6     class local(object):7         pass8  9 class Client(local):

 

 

很取巧的讓Client類繼承threading.local,也就是Client裡面的每一個屬性都是跟當前線程綁定的。實現雖然不太優雅,但是很實在。但是別以為這樣就可以隨便線上程裡面用python-memcached了,因為這種thread local的做法,你的應用必須要使用thread pool的模式,而不能不停建立銷毀thread,因為每一個新線程的建立,對於就會使用一個全新的Client,也就是一個全新的socket連結,如果不停開啟建立銷毀thread的話,就會導致不停的建立銷毀socket連結,導致效能大量下降。幸好,無論是cherrypy還是twisted,都是使用了thread pool的模式

python-memcached包使用方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.