使用pylibmc的django缓存后端
django-pylibmc的Python项目详细描述
此包为django提供memcached缓存后端,使用 pylibmc。你想用pylibmc是因为 很快。
你需要Django Pylibmc吗?
Django直接支持Pylibmc。要使用它,请设置缓存后端:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1.11211', } }
见 Django documentation 有关使用此缓存后端的详细信息。
改用django pylibmc的两个原因是:
- 您需要使用二进制协议
- 您需要使用用户名和密码来访问memcached服务器(例如 使用Memcachier on Heroku)。
要求
Django Pylibmc要求Pylibmc 1.4.1或更高版本。它支持django 1.7到 1.9和python版本2.7、3.4和3.5。
安装
从pypi:
pip install django-pylibmc
或者github:
pip install -e git://github.com/django-pylibmc/django-pylibmc.git#egg=django-pylibmc
用法
缓存后端应该如下所示:
CACHES = { 'default': { 'BACKEND': 'django_pylibmc.memcached.PyLibMCCache', 'LOCATION': 'localhost:11211', 'TIMEOUT': 500, 'BINARY': True, 'OPTIONS': { # Maps to pylibmc "behaviors" 'tcp_nodelay': True, 'ketama': True } } }
使用memcached local socket connection, 将LOCATION设置为文件的路径,即'/var/run/memcached/memcached.sock'。
如果要使用memcached二进制协议,请设置BINARY键 值为True,如上所示。BINARY默认为False。
如果要控制pylibmc behaviors,请使用 OPTIONS。OPTIONS默认为空dict。
Pylibmc支持compression和 要压缩的值的最小大小(字节)可以通过django设置 正在设置PYLIBMC_MIN_COMPRESS_LEN。默认值是0,已禁用。
Pylibmc 1.3.0及以上版本允许配置压缩级别,它可以 通过django设置PYLIBMC_COMPRESS_LEVEL进行设置。它接受 与pythonzlib相同的值 模块请注意,pylibmc将默认值从1(Z_BEST_SPEED)更改为 到1.3.0中的-1(Z_DEFAULT_COMPRESSION)。
配置环境变量
可选地,memcached连接可以配置为环境 变量(在Heroku这样的平台上)。为此,请声明以下内容 变量:
- MEMCACHE_SERVERS
- MEMCACHE_USERNAME
- MEMCACHE_PASSWORD
缓存超时
设置缓存值时,memcache允许您为 价值。通常,该值设置为以秒为单位的超时。但是,其他 允许值包括unix时间戳和“永不过期”的0。这个 最高秒数是30天-超过30天,值是 像时间戳一样对待。
Django尝试在当前缓存超时后的秒数内使用缓存超时 时间。0被视为0秒,这意味着该项应立即过期。 “无”超时表示该项不应过期。有一些 支持memcache风格的unix时间戳。
在遥远的过去(django 1.3?),超时0已转换为默认值 超时。
当前的django pylibmc行为是将0传递给后端,后者应该 被解释为“永不过期”。省略超时将得到django 违约。
今后,Django Pylibmc将采用最新的Django行为。 对于您自己的代码,最安全的解决方案是省略timeout参数(和 获取默认超时),或将其设置为以秒为单位的超时(小于30 天)。这样,当采用django行为时,您的代码就可以工作了。 避免使用超时值0、无或负数。
0.6.1-2015年12月28日
- 支持django 1.7到1.9
- 支持Python2.7、3.4和3.5
0.6.0-2015年4月1日
- 要求Pylibmc 1.4.1或更高版本
- 支持django 1.4到1.8。
- 支持Python2.5到2.7,以及Python3.3到3.4
- 在django 1.6及更高版本中,当省略超时时,默认值为 使用超时,而不是设置为“永不过期”。