'str' 不支持与 Memcached 的缓冲区接口
'str' does not support the buffer interface with Memcached
我正在使用带有 python3.4 的 django 1.7。我最近安装了 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
更新:
这个答案已经过时了。请检查 。
..................................................... ..................................................... .....................
python-memcached 库与 Python 3.4 不兼容。 pylibmc 也不支持 python3。
python3-memcached 是纯 python 内存缓存客户端实现的 outdated/unmaintained python3 端口。
在大多数情况下,Redis 被强烈认为是 memcached 的更好替代品。 redis-py 支持 python3.
pylibmc does seem to support Python3 and Django pretty well actually. After a bit of strugglig with different modules I have just successfully migrated to the pylibmc-based setup using django-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]
就我而言,将 python-memcached 更新到版本 1.59 解决了问题。这适用于 python3.4 和 Django 1.11。
我正在使用带有 python3.4 的 django 1.7。我最近安装了 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
更新:
这个答案已经过时了。请检查
python-memcached 库与 Python 3.4 不兼容。 pylibmc 也不支持 python3。
python3-memcached 是纯 python 内存缓存客户端实现的 outdated/unmaintained python3 端口。
在大多数情况下,Redis 被强烈认为是 memcached 的更好替代品。 redis-py 支持 python3.
pylibmc does seem to support Python3 and Django pretty well actually. After a bit of strugglig with different modules I have just successfully migrated to the pylibmc-based setup using django-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]
就我而言,将 python-memcached 更新到版本 1.59 解决了问题。这适用于 python3.4 和 Django 1.11。