如何使用django为memcache指定身份验证信息?

时间:2016-12-15 16:21:32

标签: django memcached

我使用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

当我禁用身份验证时,我不会收到此错误。

3 个答案:

答案 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