我正在使用新设置来增加 memcached 中的项目大小,但我无法通过 Django 后端存储大于 1mb 的内容。 我知道
memcache
模块需要一些设置才能实现这一点,并且 Django 在后端使用这个模块。
来自 memcache.py 可以保存在 memcached 中的对象的最大大小:
memcached 常见问题解答中有两个相关条目:
您可以存储的最大数据大小是多少?为什么物品仅限于 1兆字节大小?第一个的答案是(引用,强调 我的):
您可以在 memcached 中存储的值的最大大小为 1 MB。 如果您的数据较大,请考虑客户端压缩或拆分 将值分成多个键。
所以我猜你的 11MB 文件太大了,无法容纳在一个文件中 内存缓存条目。
如果你确实想缓存更大的对象,你将不得不继承 Django 的 MemcachedCache 的子类,因为它不允许你传入选项:
self._client = self._lib.Client(self._servers, pickleProtocol=pickle.HIGHEST_PROTOCOL)
子类实现示例:
from django.core.cache.backends.memcached import MemcachedCache
class LargeMemcachedCache(MemcachedCache):
"Memcached cache for large objects"
@property
def _cache(self):
if getattr(self, '_client', None) is None:
self._client = self._lib.Client(self._servers,
pickleProtocol=pickle.HIGHEST_PROTOCOL,
server_max_value_length = 1024*1024*10)
return self._client
在较新的 Django 版本中,您不需要子类化缓存类,您可以在
OPTIONS
中指定传递给缓存类构造函数的参数:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'KEY_FUNCTION': 'some.path.to.a.function',
'OPTIONS': {
'server_max_value_length': 1024 * 1024 * 10
}
}
}
请参阅文档。
请注意,您还必须通过添加以下行来增加 memcached 本身的大小:
-I 10m
到
/etc/memcached.conf
并重新启动它:
sudo service memcached restart
Django 在 4.1 之后弃用了 Memcached
您可以使用 PyMemcacheCache 代替 MemcachedCache 所以 BACKEND 变成了
"BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache",
和之前一样,memcache默认的object_size_limit是1mb,但是不再使用'serve_max_value_length'。 PyMemcacheCache 将使用您在 memcachce 配置中手动设置的任何大小限制 就我而言,在 Debian 上运行时,我必须将以下行添加到 /etc/memcached.conf
-I 10m
这使得大小限制为 10 mb