memcached作为高性能的分布式缓存系统,它的用户有Twitter、Flickr、Wikipedia、weibo等等,但凡数据量达到一定量级的厂商都在使用,它的作用就是通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度。它可以应对任意多个连接,用非阻塞网络I/O实现,客户端调用也非常简单,常用的方法也就是set,get,delete,replace等
####安装:
-
下载:libevent
-
下载:memcached
-
安装
#安装libevent ./configure --prefix=/usr make sudo make install #安装memcached: ./configure --with-libevent=/usr make sudo make install
-
启动memcache:
memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid 或者 memcached -p 11211 -m 64m -d
-
-d 作为守护(daemon)进程在后台启动
-
-u 运行memcache的用户
-
-p 小写, TCP端口,默认是11211
-
-m 最大使用内存,默认64M。memcached是基于内存的缓存系统
-
-c 最大并发连接数
-
-l 监听的服务器IP地址
-
-P 保存memcache的pid文件
####memcached调试
- -v 输出error/warning
- -vv 输出命令和响应
- -vvv 输出内部状态
使用非阻塞网络IO,在内存中开辟一块空间,建立一个HashTable,Memcached进程管理这些HashTable。
####memcached的Python客户端:
-
pylibmc:它是对libemcached的一个封装,在github fork数量是最多的。既然是依赖的libemcached,那么还需下载libmemecached,
导入 pylibmc的时候抛异常:ImportError: libmemcached.so.11: cannot open shared object file: No such file or directory
-
python-libmemcached:看名字就知道也是对libmemcached的封装,与pylibmc不同的是它还需要依赖Pyrex
-
python-memcache:这个是纯python实现的客户端,
折腾了下决定还是用python-memcache,安装
pip install python-memcache
花点时间来学习下源代码:memcache.py
基本的使用方法:
import memcache
mc = memcache.Client(['127.0.0.1:11211'], debug=0)
mc.set("some_key", "Some value")
#set方法还有个默认的过期时间为0,表示没有过期时间,最大值是60*60*24*30 也就是一个月
value = mc.get("some_key")
mc.set("another_key", 3)
mc.delete("another_key")
mc.set("key", "1") # note that the key used for incr/decr must be a string.
mc.incr("key")
mc.decr("key") #这里的decr方法减到0就不往下减了
The standard way to use memcache with a database is like this::
key = derive_key(obj)
obj = mc.get(key)
if not obj:
obj = backend_api.get(...)
mc.set(key, obj)
# we now have obj, and future passes through this code
# will use the object from the cache.
Client对象代表memcache servers 池,从构造方法接收的是一个数组就可以看出是一个pool。
key 的值必须是:
- 简单的哈稀类型(string,integer等)
- 数组
它的方法可以划分为一下几组:
设置:__init__
, set_servers, forget_dead_hosts, disconnect_all, debuglog
插入:set, add, replace, set_muti
获取:get, get_multi
整数:incr, decr
移除:delete, delete_multi
####pyramid_beaker
Beaker是Pyramid的后端session工厂,同是也是缓存配置器
#####安装
pip install pyramid_beaker
#也可以在setup.py的requires中加上pyramid_beaker
#####配置
在__init__.py
文件中加入
config = Configurator()
config.inlucde('pyramid_beaker')
更多参考文章:
http://returnfoo.com/2012/02/memcached-memory-allocation-and-optimization-2/
http://www.adayinthelifeof.nl/2011/02/06/memcache-internals/