Memcached:AWS Elasticache上支持自动发现的Python库?
我开始在我的Django网页应用中使用AWS的Elasticache。
我先是通过自动发现功能把缓存位置设置成了唯一的端点,但好像并没有成功。
我正在使用pylibmc(1.2.2)和django-pylibmc-sasl(0.2.4)来从Python连接到memcached。
这个自动发现功能在这些客户端上能用吗?我该怎么开启它呢?
3 个回答
我写了一个用于AWS ElastiCache的Python客户端,你可以试试看。
安装方法:
pip install python_memcached hash_ring
pip install elasticache_pyclient
简单使用方法:
>>> from elasticache_pyclient import MemcacheClient
>>> mc = MemcacheClient('test.lwgyhw.cfg.usw2.cache.amazonaws.com:11211')
>>> mc.set('foo', 'bar')
True
>>> mc.get('foo')
'bar'
这个包使用了python_memcached来进行实际的memcache操作,所以它的功能和python_memcached完全一样。如果你想了解更多选项,可以参考python_memcached。
这是elasticache_pyclient的主页: https://github.com/yupeng820921/elasticache_pyclient
我使用了PyLibMC这个库,但它似乎不支持自动发现功能。
Django自带的Memcached后端,在文档中提到的,和Elasticache提供的独特端点配合得很好。
现在一切运行得很顺利,我通过Memcached大大提高了响应速度。
快速回答
是的,使用Django可以用这个工具:django-elasticache
详细回答
ElastiCache提供了memcached的接口,所以有三种使用它的方式:
1. 使用配置端点的Memcached。
在这种情况下,你的应用会随机连接到集群中的节点,缓存的使用方式并不是最优的。比如,你可能一开始连接到第一个节点并设置了一个项目,但过了一会儿又连接到了另一个节点,这时你就无法获取之前设置的项目了。
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',
]
}
}
3. 使用django-elasticache。
这个工具会连接到集群,获取所有节点的IP地址,并配置memcached以使用所有节点。
CACHES = {
'default': {
'BACKEND': 'django_elasticache.memcached.ElastiCache',
'LOCATION': 'cache-c.draaaf.cfg.use1.cache.amazonaws.com:11211',
}
}
使用节点列表(django-elasticache)和仅连接到一个配置端点(使用DNS路由)之间的区别,可以在这个图表中看到: