使用django + celery配置MemCachier,我输入用户名和密码吗?

时间:2015-06-23 16:52:21

标签: django memcached celery

Celery配置包括对CELERY_RESULT_BACKEND的memcached的支持。 the documentation的示例是:

CELERY_RESULT_BACKEND = 'cache+memcached://127.0.0.1:11211/'

我目前正在尝试将芹菜配置为使用我的MemCachier缓存进行memcahed,所以我将其配置为:

CELERY_RESULT_BACKEND = 'cache+memcached://mc5.dev.ec2.memcachier.com:11211'

其中mc5.dev.ec2.memcachier.com:11211是我的缓存的url:端口。

问题是,现在当芹菜尝试使用缓存存储结果时,我收到invalid username or password错误:

12:04:29 worker.1 | ClientError: error 9 from memcached_set: (0x2f2a520) invalid username or password,  host: mc5.dev.ec2.memcachier.com:11211

我无法找到芹菜后端配置的任何示例,其中包含memcached的用户名和密码,但我尝试将其格式化为:

CELERY_RESULT_BACKEND = 'cache+memcached://<user>:<password>@mc5.dev.ec2.memcachier.com:11211'

并最终导致此错误:

ValueError: invalid literal for int() with base 10: '<password>@mc5.dev.ec2.memcachier.com'

这似乎表明该网址未被正确解析。有没有人知道配置芹菜使用MemCachier和用户名和密码的正确方法?

2 个答案:

答案 0 :(得分:0)

首先,芹菜缓存后端将与pylibmcmemcache模块一起使用,具体取决于可用的内容。您需要确保使用pylibmc,因为这是MemCachier支持的内容。

其次,似乎MemCachier没有记录认证方案。您应该阅读pylibmc的来源,看看它是如何处理的。

我认为您必须升级celery.backends.cache.CacheBackend才能添加auth支持。

答案 1 :(得分:0)

我最终搞清楚了。诀窍是不要通过需要身份验证的CELERY_RESULT_BACKEND创建对缓存的新引用,而是使用对(已经过身份验证的)django缓存后端的引用。

换句话说,一旦你有这个工作:

In [1]: from django.core.cache import cache

In [2]: cache.set('foo', 'bar')
Out[2]: True

In [3]: cache.get('foo')
Out[3]: 'bar'

芹菜后端可以配置为使用这样的缓存:

CELERY_RESULT_BACKEND = 'djcelery.backends.cache:CacheBackend'