ycvodzf 发表于 2017-4-28 13:26:38

python-memcached 使用方法总结

1.Python-memcached API总结
整个memcache.py只有1241行,相当精简
主要方法如下:
@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, 使用方法如下
  >>> mc.set_multi({'k1' : 1, 'k2' : 2}, key_prefix='pfx_') == []
  >>> 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,使用如下
>>> mc.set("counter", "20")  
>>> mc.incr("counter")
21
@decr(key,delta=1)
自减变量减去delta,默认减1
2._set方法
很多方法内部都调用了_set方法,其源码如下:

   def _set(self, cmd, key, val, time, min_compress_len = 0):
self.check_key(key)
server, key = self._get_server(key)
if not server:
return 0
self._statlog(cmd)
store_info = self._val_to_store_info(val, min_compress_len)
if not store_info: return(0)
if cmd == 'cas':
if key not in self.cas_ids:
return self._set('set', key, val, time, min_compress_len)
fullcmd = "%s %s %d %d %d %d\r\n%s" % (
cmd, key, store_info, time, store_info,
self.cas_ids, store_info)
else:
fullcmd = "%s %s %d %d %d\r\n%s" % (
cmd, key, store_info, time, store_info, store_info)
try:
server.send_cmd(fullcmd)
return(server.expect("STORED") == "STORED")
except socket.error, msg:
if isinstance(msg, tuple): msg = msg
server.mark_dead(msg)
return 0
注: memcached 的客户端使用TCP链接与服务器通讯, 一个运行中的memcached服务器监视一些端口, 客户端连接这些端口,发送命令到服务器,读取回应,最后关闭连接
页: [1]
查看完整版本: python-memcached 使用方法总结