我有一个具有搜索功能的应用程序。此功能在我缓存 24 小时的巨型对象(字典)中查找搜索词。该对象大约有 50,000 个键,重约 10MB。
当我分析主机上的内存使用情况时,我注意到经过几次查询后,内存使用量从大约 50MB 上升到超过 450MB,这促使我的主机提供商终止了该应用程序。
所以我想知道这里发生了什么。具体来说,缓存如何在每个请求上利用内存,我能做些什么来解决这个问题?
Django FileBasedCache 以存在性能问题而闻名。您可以通过以下链接获得大图:
错误被设置为不会修复争论:
我将不会修复,因为文件系统缓存旨在作为测试缓存的一种简单方法,而不是作为一种严肃的缓存策略。默认缓存大小和文件缓存实现的剔除策略应该很明显。
考虑使用像 Memcache 或 Redis 这样的 KVS 作为缓存策略,因为它们都支持过期。此外,如果更多预期功能与搜索相关,请考虑使用 ElasticSearch 等专用搜索。
工具是可用的方法:
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