7

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

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

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

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

4

3 回答 3

8

快速回答

是的 django:django-elasticache

长答案

ElastiCache 提供了 memcached 接口,因此有三种使用它的解决方案:

1. 使用 location = Configuration Endpoint 配置的 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 路由)之间的区别,您可以在此图中看到:

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

于 2014-02-28T23:11:20.347 回答
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

于 2013-10-22T08:08:02.753 回答
1

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

Django 内置并在文档中使用的 Memcached 后端与 Elasticache 提供的独特端点配合良好。

现在一切都运行良好,我使用 Memcached 改进了很多响应时间。

于 2013-02-01T01:26:13.573 回答