1

我正在使用 django 1.7 和 python3.4。我最近安装了 Memcached,并试图根据站点缓存将它与 python-memcached 一起使用。但是,一旦我在 settings.py 中定义了默认缓存后端,我的应用程序就会停止工作并抛出此错误:

'str' does not support the buffer interface

安装的中间件和回溯是:

Installed Middleware:
('debug_toolbar.middleware.DebugToolbarMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.cache.UpdateCacheMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware')


Traceback:
File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response
  87.                 response = middleware_method(request)
File "C:\Python34\lib\site-packages\django\middleware\cache.py" in process_request
  148.         cache_key = get_cache_key(request, self.key_prefix, 'GET', cache=self.cache)
File "C:\Python34\lib\site-packages\django\utils\cache.py" in get_cache_key
  223.     headerlist = cache.get(cache_key, None)
File "C:\Python34\lib\site-packages\django\core\cache\backends\memcached.py" in get
  82.         val = self._cache.get(key)
File "C:\Python34\lib\site-packages\memcache.py" in get
  1002.         return self._get('get', key)
File "C:\Python34\lib\site-packages\memcache.py" in _get
  986.             return _unsafe_get()
File "C:\Python34\lib\site-packages\memcache.py" in _unsafe_get
  957.                 server.send_cmd("%s %s" % (cmd, key))
File "C:\Python34\lib\site-packages\memcache.py" in send_cmd
  1299.         self.socket.sendall(cmd + '\r\n')

Exception Type: TypeError at /ask/
Exception Value: 'str' does not support the buffer interface

请告诉我什么是问题和解决方案。python-memcache 绑定是否不适用于 python3.4

4

3 回答 3

3

pylibmc似乎确实很好地支持 Python3 和 Django。在对不同的模块进行了一番努力之后,我刚刚使用django-pylibmc成功迁移到了基于 pylibmc 的设置: sudo apt-get install libmemcached-dev pip install pylibmc pip install django-pylibmc

并且 Django 缓存配置发生了变化以使用新模块: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1.11211', } } Python3 下的所有内容: uwsgi socket 0 bound to TCP address 127.0.0.1:9090 fd 3 Python version: 3.4.0 (default, Jun 19 2015, 14:24:19) [GCC 4.8.2]

于 2015-07-16T12:34:35.507 回答
0

就我而言,将 python-memcached 更新到 1.59 版解决了这个问题。这适用于 python3.4 和 Django 1.11。

于 2018-12-03T14:50:13.687 回答
-2

更新: 这个答案已经过时了。请检查下面的其他答案。..................................................... ..................................................... .....................

python-memcached 库与 Python 3.4 不兼容。pylibmc也不支持 python3。

python3-memcached是纯 python memcache 客户端实现的过时/未维护的 python3 端口。

在大多数情况下,Redis 被强烈认为是 memcacahed 的更好替代品。redis-py支持 python3。

于 2015-06-08T05:21:09.713 回答