我使用rediscloud为我的django安装提供内存缓存支持。 它允许设置SASL身份验证用户名和密码(不确定sasl可能是一个问题)。
我没有找到正确的语法来从django提供它们:
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.memcached.MemcachedCache",
"LOCATION": "pub-memcache-********.com:17****",
"username": "user",
"password": "pass"
}
}
那么正确的语法是什么?
编辑:
安装了PyLibMCCache,但我无法连接:
在settings.py中
os.environ[ 'MEMCACHE_SERVERS' ] = 'pub-****:****'
os.environ[ 'MEMCACHE_USERNAME' ] = '*'
os.environ[ 'MEMCACHE_PASSWORD' ] = '*'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': 'pub-****.com:****',
'BINARY' : True,
}
}
错误:
从memcached_get(:1:ddd-37041)错误3:(0x1068af060)连接 FAILURE,:: rec()返回零,服务器已断开连接,主机: pub- *。com: - > libmemcached / io.cc:484
当我禁用身份验证时,我不会收到此错误。
答案 0 :(得分:1)
来自rediscloud的回答:
在某些环境中,需要具有身份验证的二进制协议 其中bmemcached模块支持memcached二进制协议 认证
我们要求您尝试使用解决错误 Django的bmemcached。
为此,请安装django-bmemcached:
pip install python-binary-memcached
和
pip install django-bmemcached
接下来,在settings.py文件中配置您的CACHES:
import os
import urlparse
import json
CACHES = {
'default': {
'BACKEND': 'django_bmemcached.memcached.BMemcached',
'LOCATION': '******.com:1****',
'OPTIONS': {
'username': 'user',
'password': 'pass'
}
}
}
这样可以,并允许通过身份验证访问其memcached服务器。
所以这是使用memcached的另一种选择。
答案 1 :(得分:0)
您可能需要使用外部库:
https://github.com/django-pylibmc/django-pylibmc
pip install django-pylibmc
他们的README解释了它:
Django直接支持pylibmc。 [...] 使用django-pylibmc的两个原因是:
- 您需要使用二进制协议
- 您需要使用用户名和密码才能访问memcached服务器(例如Heroku上的Memcachier)。
答案 2 :(得分:0)
如果在memcached缓存上使用用户名和密码,则应切换到PyLibMCCache绑定,如下所示。从1.11版开始,Django对PyLibMCCache绑定(以及pylibmc)具有开箱即用的支持。较早的Django版本要求您安装django-pylibmc。
通常的django.core.cache.backends.memcached.MemcachedCache不支持密码。
下面是使用PyLibMCCache和用户身份验证的示例:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211',
'OPTIONS': {
'binary': True,
'username': 'my_username',
'password': 'my_password',
}
},
}
django文档注意:选项:应传递到缓存后端的任何选项。有效选项的列表随每个后端的不同而不同,由第三方库支持的缓存后端会将其选项直接传递给基础缓存库。 options docs
因此,在pylibmc v1.6.0文档中,我们看到以下内容: 用户名和密码是SASL身份验证的凭据。它需要libmemcached和binary = True的支持。使用pylibmc.support_sasl测试本地支持。 pylibmc reference docs
有关memcached和django的一般概述,请参见:https://docs.djangoproject.com/en/3.1/topics/cache/#memcached
有关pylibmc中可用设置的说明,请参见:http://sendapatch.se/projects/pylibmc/
请注意,密码,用户名和返回的数据将全部为纯文本,如memchaced.org所述: 即使对于SASL,由于身份验证和所有其他内容都将通过纯文本发送,因此仍需要使用隧道形式的VPN或TLS 。参见memcached/issues/184