Memcached: 在AWS Elasticache上自动发现python支持?

7

我开始在我的Django web应用中使用AWS Elasticache。

我通过使用自动发现功能将缓存位置设置为唯一的端点,但似乎没有起作用。

我正在使用pylibmc(1.2.2)和django-pylibmc-sasl(0.2.4)从Python连接到Memcached。

这些客户端支持自动发现功能吗?我该如何启用它?

3个回答

8

快速答案

是的,对于Django: django-elasticache

详细回答

ElastiCache提供memcached接口,因此有三种使用方法:

1. 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',
        ]
    }
}

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路由)之间的区别可以在此图表中看到:

获取具有两个节点的群集的统计信息


如果您前往django-elasticache获取安装说明,请勿使用以下命令:pip install django-pylibmc - 它不包含 "django_elasticache",会导致内部服务器错误。请改用从Git安装的命令。 - Chuck

1
我为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

2
请注意,仅链接答案 不被鼓励,Stack Overflow上的答案应该是搜索解决方案的终点(而不是另一个可能变得过时的参考站点)。请考虑在这里添加一个独立的简介,并保留链接作为参考。 - kleopatra

1
我使用的PyLibMC绑定似乎不支持自动发现。
Django内置的Memcached后端,在文档中使用,与Elasticache提供的唯一端点良好配合使用。
现在一切都很顺利,并且我通过Memcached大大提高了响应时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接