1

Im using new setting to increase item size in memcached, but i cant store something larger than 1mb through Django backend. I know that memcache module require some setting to achieve thath, and Django use this module in backend.

4

2 回答 2

6

可以使用 memcache.py 保存在 memcached 中的对象的最大大小

memcached FAQ 中有两个关于此的条目:

  • 您可以存储的最大数据大小是多少?为什么项目的大小限制为 1 兆字节?第一个的答案是(引用,强调我的):

  • 您可以存储在 memcached 中的值的最大大小为 1 兆字节。如果您的数据较大,请考虑客户端压缩或将值拆分为多个键。

所以我猜你的 11MB 文件太大了,无法放入一个 memcached 条目中。

如果您确实想缓存较大的对象,则必须将 Django 的 MemcachedCache 子类化,因为它不允许您传入 options

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
于 2013-07-28T08:17:54.797 回答
1

在更新的 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
于 2021-03-23T12:10:30.330 回答