亚马逊Elasticache的Django缓存后端(memcached)
django-elasticache的Python项目详细描述
Amazon Elasticache的简单Django缓存后端(基于memcached)。它使用 pylibmc并设置到每个 群集中的节点使用 auto discovery。
要求
- Pylibmc
- Django 1.5+。
它是在Python2.7和3.4上编写和测试的。
安装
从pypi:
pip install django-elasticache
或者github:
pip install -e git://github.com/gusdan/django-elasticache.git#egg=django-elasticache
用法
缓存后端应该如下所示:
CACHES = { 'default': { 'BACKEND': 'django_elasticache.memcached.ElastiCache', 'LOCATION': 'cache-c.draaaf.cfg.use1.cache.amazonaws.com:11211', 'OPTIONS' { 'IGNORE_CLUSTER_ERRORS': [True,False], }, } }
通过第一次调用cache,它连接到集群(使用LOCATIONparam)。 获取所有节点的列表,并使用full设置pylibmc客户端 节点列表。因此,您的缓存将与群集中的所有节点一起工作,并且 自动检测群集中的新节点。节点列表存储在类级别 缓存,因此只有在重新启动工作进程后,群集中的任何更改才会生效。 但是,如果您使用的是Gunicorn或mod_wsgi,则通常有max_request设置 在处理了一些请求后重新启动进程,因此自动发现将起作用 好的。
当LOCATION不支持时,IGNORE_CLUSTER_ERRORS选项非常有用 对于config get cluster。当设置为True并且config get cluster失败时, 它返回具有提供给LOCATION的相同端点的单个节点的列表。
Django Elasticache更改默认Pylibmc参数以提高性能。
其他解决方案
Elasticache提供memcached接口,因此有三种使用方法:
一。memcached配置为location=configuration endpoint
在这种情况下,您的申请 将随机连接到群集中的节点,缓存将以非最佳方式使用 太好了。在某个时刻,您将连接到第一个节点并设置项。几分钟后 您将连接到另一个节点,无法获取此项目。
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': 'cache.gasdbp.cfg.use1.cache.amazonaws.com:11211', } }
2.memcached配置所有节点
会很好的,memcache客户端会 在所有节点之间分离项,并在客户端平衡负载。你会 只有在添加新节点或删除旧节点后才有问题。在这种情况下你应该 手动添加新节点,不要忘记在aws上进行所有更改后更新应用程序。
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': [ 'cache.gqasdbp.0001.use1.cache.amazonaws.com:11211', 'cache.gqasdbp.0002.use1.cache.amazonaws.com:11211', ] } }
三。使用django elasticache
它将连接到群集并检索IP地址 并将memcached配置为使用所有节点。
CACHES = { 'default': { 'BACKEND': 'django_elasticache.memcached.ElastiCache', 'LOCATION': 'cache-c.draaaf.cfg.use1.cache.amazonaws.com:11211', } }
使用节点列表(django elasticache)和 连接到只能在上看到的一个配置终结点(使用DNS路由) 此图:
测试
像这样运行测试:
nosetests