pbh*_*ick 4 python django google-app-engine memcached caching
设置Django以使用Memcached进行缓存(在我的情况下,我想使用会话缓存),在settings.py我们设置
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
Run Code Online (Sandbox Code Playgroud)
我将在App Engine中运行该项目,所以我的问题是我该怎么做才能LOCATION进入?
Ste*_*ven 16
碰巧的是,我在过去的几天里一直在向GAE移植一个Django(1.6.5)应用程序(GAE Development SDK 1.9.6).我现在不需要缓存,但如果我需要的话,知道它可用是很好的.
所以我只是尝试使用django.core.cache.backends.memcached.MemcachedCache我的缓存后端(按照你在问题中描述的设置,并将python-memcached放在我的libs文件夹中)和
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
Run Code Online (Sandbox Code Playgroud)
管理我的会话和GAE给了我错误:
RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable.
Run Code Online (Sandbox Code Playgroud)
...即使你可以让它工作,使用谷歌的API库并借用Django Memcached实现肯定会更好,特别是因为谷歌lib被设计为与python-memcached兼容,否则你的应用程序可能会破坏任何SDK更新的时间.创建一个python模块,例如my_project/backends.py:
import pickle
from django.core.cache.backends.memcached import BaseMemcachedCache
class GaeMemcachedCache(BaseMemcachedCache):
"An implementation of a cache binding using google's app engine memcache lib (compatible with python-memcached)"
def __init__(self, server, params):
from google.appengine.api import memcache
super(GaeMemcachedCache, self).__init__(server, params,
library=memcache,
value_not_found_exception=ValueError)
@property
def _cache(self):
if getattr(self, '_client', None) is None:
self._client = self._lib.Client(self._servers, pickleProtocol=pickle.HIGHEST_PROTOCOL)
return self._client
Run Code Online (Sandbox Code Playgroud)
然后您的缓存设置变为:
CACHES = {
'default': {
'BACKEND': 'my_project.backends.GaeMemcachedCache',
}
}
Run Code Online (Sandbox Code Playgroud)
而已!这似乎工作正常,但我应该清楚,它没有经过严格的测试!
各地都捅在google.appengine.api.memcache.__init__.py你的GAE SDK文件夹,你会发现:
def __init__(self, servers=None, debug=0,
pickleProtocol=cPickle.HIGHEST_PROTOCOL,
pickler=cPickle.Pickler,
unpickler=cPickle.Unpickler,
pload=None,
pid=None,
make_sync_call=None,
_app_id=None):
"""Create a new Client object.
No parameters are required.
Arguments:
servers: Ignored; only for compatibility.
...
Run Code Online (Sandbox Code Playgroud)
即使你可以LOCATION在云中找到一个for memcache实例,谷歌自己的库也会忽略它.
| 归档时间: |
|
| 查看次数: |
4731 次 |
| 最近记录: |