2012-05-19 90 views
6

我有一個應用程序,它具有搜索功能。此功能在我緩存24小時的巨大對象(字典)中查找搜索項。該對象大約是5萬個按鍵,重約10MB。緩存如何影響內存消耗?

當我的個人主頁與我的主機內存使用情況,我注意到幾個查詢後,內存使用量從大約50MB變爲了450MB,這促使我的託管服務提供商,以終止該應用。

所以我想知道這裏發生了什麼。具體來說,緩存如何在每個請求中使用內存,我該如何解決這個問題?

+0

你使用哪種緩存技術? Memcached的? – Lycha

+0

目前,我正在使用'FileBasedCache' –

+1

文件緩存不會導致內存泄漏。您的項目是否有其他地方將查詢集或對象存儲在本地內存中?也就是說[contenttype manager](https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#the-contenttypemanager) – San4ez

回答

1

Django的FileBasedCache被稱爲有性能問題。您可以在以下鏈接獲得一個大圖片:

A smarter filebasedcache for Django

Bug: File based cache not very efficient with large amounts of cached files

bug已被設置爲不會修復爭論:

我要去wontfix,上理由是文件系統緩存旨在作爲測試緩存的簡單方法,而不是作爲一種嚴肅的緩存策略。默認的緩存大小和 文件緩存實現的剔除策略應該很明顯。

+0

我不緩存您的示例中提到的一堆對象。我有一把鑰匙。我不認爲你的例子適用。此外,每次查詢後內存使用量都會增加 - 這在某種程度上會變得緩慢,但隨後我的託管服務提供商殺死了應用程序。 –

0

考慮使用像Memcache或Redis這樣的KVS作爲緩存策略,因爲它們都支持到期。此外,如果更多預期的功能將與搜索相關,請考慮像ElasticSearch這樣的專用搜索。

工具是HOWTO文檔可供選擇:

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