我开始在我的 django Web 应用程序中使用 AWS Elasticache。
我首先使用自动发现功能将缓存位置设置为唯一端点,但它似乎不起作用。
我正在使用 pylibmc (1.2.2) 和 django-pylibmc-sasl (0.2.4) 从 python 连接到 memcached。
自动发现功能是否适用于这些客户端?我该如何启用它?
是的 django:django-elasticache
ElastiCache 提供了 memcached 接口,因此有三种使用它的解决方案:
在这种情况下,您的应用程序将随机连接到集群中的节点,并且将以非最佳方式使用缓存。在某个时刻,您将连接到第一个节点并设置项目。几分钟后,您将连接到另一个节点,并且无法获取此项目。
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': 'cache.gasdbp.cfg.use1.cache.amazonaws.com:11211',
}
}
它会正常工作,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',
]
}
}
它将连接到集群并检索所有节点的 IP 地址,并将 memcached 配置为使用所有节点。
CACHES = {
'default': {
'BACKEND': 'django_elasticache.memcached.ElastiCache',
'LOCATION': 'cache-c.draaaf.cfg.use1.cache.amazonaws.com:11211',
}
}
使用节点列表(django-elasticache)进行设置和仅连接到一个配置端点(使用 dns 路由)之间的区别,您可以在此图中看到:
我为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 改进了很多响应时间。