在Heroku Memcachier上配置Django缓存计算机?
我想在Heroku上使用Memcachier来使用很棒的缓存机器Django app() 据我所知,缓存机器不能与Memcachier一起开箱即用,因为Memcachier需要PyLibMC和SASL身份验证(请参阅)。Cache Machine表示它支持PyLibMC——您所要做的就是将“caching.backends.memcached.Pylibmcache”添加到缓存设置中 但当您执行此操作时,会出现以下错误:“memcached_set中的错误47:服务器已失败,并且在定时重试之前处于禁用状态” 我认为造成这种情况的原因是caching.backends.memcached.pylibmcache继承自django.core.cache.backends.memcached.PyLibMC(请参阅),因为它应该继承自django_PyLibMC.memcached.pylibmcache,以便在Heroku上工作(但这有点像是在黑暗中拍摄) 我创建了自己的自定义缓存后端,而不是从django_pylibmc.memcached.Pylibmcache继承而来,但是现在当我检查我的Heroku Memcacheer面板时,似乎我所做的任何事情都没有增加缓存——它被固定在50MB,尽管我希望它会随着每个查询集的增加而增加在Heroku Memcachier上配置Django缓存计算机?,django,heroku,memcached,django-cache-machine,Django,Heroku,Memcached,Django Cache Machine,我想在Heroku上使用Memcachier来使用很棒的缓存机器Django app() 据我所知,缓存机器不能与Memcachier一起开箱即用,因为Memcachier需要PyLibMC和SASL身份验证(请参阅)。Cache Machine表示它支持PyLibMC——您所要做的就是将“caching.backends.memcached.Pylibmcache”添加到缓存设置中 但当您执行此操作时,会出现以下错误:“memcached_set中的错误47:服务器已失败,并且在定时重试之前处
有人在Heroku上成功设置了缓存计算机吗?如果是这样,你是怎么做到的?我和MemCachier一起工作。我们以前没有直接处理过缓存机器,但我只是构建了一个小应用程序,然后确认它在Heroku和MemCachier上运行良好 如果您对memcache和MemCachier不太熟悉,请提供快速的背景知识。客户机和服务器之间有两种通信协议。一个是较旧的
ascii
协议,另一个是较新的binary
协议。我们MemCachier只支持二进制
协议,因为它支持身份验证,而ascii
协议不支持身份验证
您所犯的错误是使用caching.backends.memcached.pylibmcache
作为缓存后端。虽然pylibmc
是我们推荐的memcache客户端,因为它支持binary
协议和sasl身份验证,但Django附带的缓存接口不支持启用binary协议。因此,pylibmc只是使用默认值,即ascii
协议,但失败了
你可以看到关于这个问题的Django的票
因此,在MemCachier,我们一直建议您使用替代的django pylibmc sasl
软件包。该软件包也使用pylibmc
,但提供了不同于django提供的缓存接口,django提供的缓存接口不支持启用二进制协议和身份验证。这在我们的文档中进行了讨论
下面是我通常放在settings.py
中的代码,用MemCachier配置Django的缓存:'
## MemCachier Settings
## ===================
def get_cache():
# We do this complicated cache defenition so that on a local machine (where
# MEMCACHIER_SERVERS won't be defined), the try fails and so we use the
# inbuilt local memory cache of django.
try:
os.environ['MEMCACHE_SERVERS'] = os.environ['MEMCACHIER_SERVERS'].replace(',', ';')
os.environ['MEMCACHE_USERNAME'] = os.environ['MEMCACHIER_USERNAME']
os.environ['MEMCACHE_PASSWORD'] = os.environ['MEMCACHIER_PASSWORD']
return {
'default': {
'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
'TIMEOUT': None,
'BINARY': True,
'OPTIONS': {
'tcp_nodelay': True,
'no_block': True,
'tcp_keepalive': True,
'_poll_timeout': 2000,
'ketama': True,
'connect_timeout': 2000,
'remove_failed': 4,
'retry_timeout': 2,
'dead_timeout': 10
}
}
}
except:
# Use django local development cache (for local development).
return {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
}
}
CACHES = get_cache()
这也将使在本地计算机上开发变得容易,因为当未定义MEMCACHIER\u服务器时,它将退回到django的简单本地堆缓存,从而避免您在本地安装memcache
希望这对杰克有帮助 非常感谢您指出问题所在,并将get_cache函数组合在一起。唯一的问题是(我认为)对于像Cache Machine这样的东西,您需要使用以“caching.backends…”开头的自定义缓存后端。我想知道是否需要定义自己的后端来利用SASL?你对如何开始有什么建议吗?是不是“思考”意味着你尝试了上面的方法,但失败了?或者这是一个假设?若缓存机器有这样的限制,我会非常惊讶,它这样做并没有任何意义。另外,在我的测试中,我让缓存机器使用上述方法。因此,如果您的不工作,请您张贴错误,以便我可以进一步诊断。感谢您再次联系。当我尝试您的解决方案时(这类似于我在发布SO之前第一次尝试的方法,现在也再次尝试),我没有收到任何错误。然而,我认为它不起作用,因为我的Memcachier仪表板根本没有显示“当前使用情况”或“键数”在我预期的情况下增加。(当我将“caching.backends.memcached.memcached”后端与Elasticache/我自己的缓存服务器一起使用时,该站点的使用会导致缓存使用率的增加,正如预期的那样。)我还没有深入研究缓存机源代码(我不确定我是否有足够的程序员来这样做),但我的理解是,他们已经编写了定制的memcached后端(即“后端”设置中的内容),使用其中一个后端是它工作所必需的。但是,至少到目前为止,我认为他们的任何后端都不能与SASL一起工作——而且我也不确定是否有一个简单的解决方案。Jake,我针对MemCachier本身测试了这个解决方案,所以我知道它可以与SASL身份验证一起工作。我很有信心,一定是出了什么问题。这可能只是因为我们的仪表盘没有按预期工作,使您相信缓存在正常工作时没有工作。这很少见,但有时我们的仪表板会认为您使用的是与实际不同的群集,因此不会显示缓存使用情况。