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

时间:2013-01-30 20:01:34

标签: python django caching memcached

我开始在我的django网络应用程序中使用AWS Elasticache。

我首先使用自动发现功能将缓存位置设置为唯一端点,但似乎无效。

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

自动发现功能是否适用于这些客户端?我该如何启用它?

3 个答案:

答案 0 :(得分: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路由),您可以看到 这张图:

Get statistic for cluster with two node

答案 1 :(得分:1)

我使用的PyLibMC绑定似乎不支持自动发现。

使用Django内置并在documentation中使用的Memcached后端与Elasticache提供的唯一端点配合良好。

现在一切正常,我用Memcached改进了很多响应时间。

答案 2 :(得分:1)

我为aws弹性编写了一个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