我的Django应用涉及25MB的二进制文件。 他们每个人都有约10万每256个字节的“记录”。
我花了大约7秒从磁盘读取的二进制文件,并使用Python的结构模块解码。 我把数据转换成约10万项,其中每个项目是不同类型(浮点,字符串等)的值的字典的列表。
我的Django的意见需要通过这个列表来搜索。 显然7秒太长。
我一直在使用Django的低级别的缓存API来缓存整个列表尝试,但不会工作,因为有1MB的任何单个缓存项的最大大小限制。 我试过单独缓存100,000列表项,但需要大量的7秒钟以上 - 大部分的时间都花在取储存的项目。
有没有存储在请求之间存储的大名单一个便捷的方式? 你能想到的另一种方式我Django应用程序缓存使用的对象?
编辑项目大小限制为10M(大于1M),加
-I 10m
到/etc/memcached.conf并重新启动的memcached
还可以编辑这个类位于/usr/lib/python2.7/dist-packages/django/core/cache/backends看起来像这样memcached.py:
class MemcachedCache(BaseMemcachedCache):
"An implementation of a cache binding using python-memcached"
def __init__(self, server, params):
import memcache
memcache.SERVER_MAX_VALUE_LENGTH = 1024*1024*10 #added limit to accept 10mb
super(MemcachedCache, self).__init__(server, params,
library=memcache,
value_not_found_exception=ValueError)
我不能添加评论,但我想分享解决此问题我速战速决,因为我有蟒蛇,memcached的行为出现异常,当你改变了同样的问题SERVER_MAX_VALUE_LENGTH
在导入时。
那么,除了__init__
是FizxMike建议你还可以在同一类编辑_cache属性编辑。 这样做可以实例化的python-的memcached客户端传递server_max_value_length
明确的,就像这样:
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
我还希望创建另一个后端,从BaseMemcachedCache继承并使用它,而不是编辑Django的代码。
这里的参考Django的memcached的后端模块: https://github.com/django/django/blob/master/django/core/cache/backends/memcached.py
感谢在此线程的所有帮助!