SERVER_MAX_VALUE_LENGTH
まだコメントを追加することはできませんが、インポート時に を変更すると python-memcached が奇妙に動作するという同じ問題があったため、この問題に関する私の簡単な修正を共有したいと思いました。
さて、__init__
FizxMike が提案する編集に加えて、同じクラスで _cache プロパティを編集することもできます。そうすることserver_max_value_length
で、次のように明示的に渡す python-memcached クライアントをインスタンス化できます。
from django.core.cache.backends.memcached import BaseMemcachedCache
DEFAULT_MAX_VALUE_LENGTH = 1024 * 1024
class MemcachedCache(BaseMemcachedCache):
def __init__(self, server, params):
#options from the settings['CACHE'][connection]
self._options = params.get("OPTIONS", {})
import memcache
memcache.SERVER_MAX_VALUE_LENGTH = self._options.get('SERVER_MAX_VALUE_LENGTH', DEFAULT_MAX_VALUE_LENGTH)
super(MemcachedCache, self).__init__(server, params,
library=memcache,
value_not_found_exception=ValueError)
@property
def _cache(self):
if getattr(self, '_client', None) is None:
server_max_value_length = self._options.get("SERVER_MAX_VALUE_LENGTH", DEFAULT_MAX_VALUE_LENGTH)
#one could optionally send more parameters here through the options settings,
#I simplified here for brevity
self._client = self._lib.Client(self._servers,
server_max_value_length=server_max_value_length)
return self._client
また、Django コードを編集する代わりに、BaseMemcachedCache を継承する別のバックエンドを作成して使用することも好みます。
参照用の django memcached バックエンド モジュールは次のとおりです:
https://github.com/django/django/blob/master/django/core/cache/backends/memcached.py
このスレッドのすべてのヘルプに感謝します!