Django缓存一个大列表

标签 django caching memcached deserialization pickle

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

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

我的 django View 需要搜索此列表。显然 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)

关于Django缓存一个大列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874377/

相关文章:

Django : How to pass context?

azure - MemCache 与 Azure 缓存

java - 可以持久保存到磁盘的 memcached 的替代品

python - Django - 对多个标准进行评级 : Model Formset?

python - Django - 强制执行 ManyToManyField 唯一项

django图片上传无法导入名称_imaging

memcached - Memcached 的分布式特性

javascript - Ext JS 类的最佳实践最终会产生过多的 .js 文件。性能怎么样?

php - 使用 Silex 的 Twig addFilter?

asp.net - 通过 https 有选择地缓存 .js 和 .png 文件?