Django缓存大量列表

phu*_*oid 5 django memcached caching pickle deserialization

我的django应用程序处理25MB二进制文件.它们中的每一个都有大约100,000个"记录",每个"256"字节.

从磁盘读取二进制文件并使用python的struct模块解码它需要大约7秒钟.我将数据转换为大约100,000个项目的列表,其中每个项目都是一个字典,其中包含各种类型的值(浮点数,字符串等).

我的django视图需要搜索此列表.显然7秒太长了.

我已经尝试使用django的低级缓存API来缓存整个列表,但这不起作用,因为任何单个缓存项目的最大大小限制为1MB.我已经尝试单独缓存100,000个列表项,但这需要花费超过7秒的时间 - 大部分时间都花在取消项目上.

是否有方便的方法在请求之间在内存中存储大型列表?您能想到另一种缓存对象以供我的django应用程序使用的方法吗?

Fiz*_*ike 6

将项目大小限制编辑为10米(大于1米),添加

-I 10m
Run Code Online (Sandbox Code Playgroud)

到/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)
Run Code Online (Sandbox Code Playgroud)

  • 只是浪费了几个小时试图解决这个问题......无法弄清楚是否应该归咎于 memcache 或 Django,然后意识到两者都是!干杯 (2认同)