gpt4 book ai didi

python - 为 App Engine 上的 Django session 缓存设置 Memcached

转载 作者:太空狗 更新时间:2023-10-30 01:44:41 25 4
gpt4 key购买 nike

当设置 Django 以使用 Memcached 进行缓存时(在我的例子中,我想使用 session 缓存),在 settings.py 中我们设置

CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}

我将在 App Engine 中运行该项目,所以我的问题是如何处理 LOCATION 条目?

最佳答案

碰巧的是,过去几天我一直在将 Django (1.6.5) 应用程序移植到 GAE(GAE Development SDK 1.9.6)。我现在对缓存的需求不大,但很高兴知道它在我需要时可用。

所以我只是尝试使用 django.core.cache.backends.memcached.MemcachedCache 作为我的缓存后端(按照你在问题中描述的设置,我把 python-memcached 放在我的 libs 文件夹中) 和

SESSION_ENGINE = 'django.contrib.sessions.backends.cache' 

为了管理我的 session ,GAE 给了我错误:

RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable.

无论如何...

...即使您可以让它工作,使用 Google 的 API 库并借用 Django Memcached 实现肯定更好,特别是因为 Google 库被设计为 compatible with 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

然后你的缓存设置变成:

CACHES = {
'default': {
'BACKEND': 'my_project.backends.GaeMemcachedCache',
}
}

就是这样!这似乎工作正常,但我应该清楚它没有经过严格测试!

一边

在您的 GAE SDK 文件夹中的 google.appengine.api.memcache.__init__.py 中搜索一下,您会发现:

  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.
...

即即使您可以在云中找到您的内存缓存实例的 LOCATION,Google 自己的库也会忽略它。

关于python - 为 App Engine 上的 Django session 缓存设置 Memcached,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24699935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com