我有一个具有搜索功能的应用。此功能在我缓存24小时的巨型对象(字典)中查找搜索项。该对象大约有50,000个按键,重约10MB。
当我分析我的主机上的内存使用情况时,我注意到经过几次查询后,内存使用量从大约50MB变为超过450MB,促使我的托管服务提供商终止应用程序。
所以我想知道这里发生了什么。具体来说,缓存如何利用每个请求的内存,我该怎么做才能解决这个问题?
答案 0 :(得分:1)
Django FileBasedCache因性能问题而闻名。您可以通过以下链接全面了解:
A smarter filebasedcache for Django
Bug: File based cache not very efficient with large amounts of cached files
错误被设置为不会修复争论:
我打算用wontfix,因为文件系统缓存是一种简单的方法来测试缓存,而不是一个严肃的缓存 战略。默认缓存大小和实现的剔除策略 文件缓存应该很明显。
答案 1 :(得分:0)
考虑使用像Memcache或Redis这样的KVS作为缓存策略,因为它们都支持到期。此外,如果更多预期功能与搜索相关,请考虑像ElasticSearch这样的专用搜索。
工具是如何提供的:
Installing memcached for a django project
http://code.google.com/p/memcached/wiki/NewStart
http://redis.io/commands/expire
https://github.com/bartTC/django-memcache-status
http://www.elasticsearch.org/guide/reference/index-modules/cache.html