..如何使用一些适当的缓存服务,例如redis或memcached,而不是在内存python端加载巨大的对象?这样,如果字典增长得更多,您甚至可以在额外的机器上进行扩展。
无论如何,100MB 内存包含所有数据 + 哈希索引 + 杂项。高架; 前几天我注意到自己在退出 Python 进程之前,很多时候内存都没有被释放(我从 Python 解释器中填充了几个 gig 的内存,加载了一个巨大的 json 对象.. :));如果有人对此有解决方案会很有趣..
更新:用很少的内存缓存
只有 512MB 内存的选项是:
并且,在后两种情况下,请尝试拆分对象,这样您就不会一次从缓存中检索兆字节的对象。
更新:跨越多个缓存键的惰性字典
你可以用这样的东西替换你缓存的字典;这样,您可以继续像使用普通字典一样处理它,但只有在您真正需要时才会从缓存中加载数据。
from django.core.cache import cache
from UserDict import DictMixin
class LazyCachedDict(DictMixin):
def __init__(self, key_prefix):
self.key_prefix = key_prefix
def __getitem__(self, name):
return cache.get('%s:%s' % (self.key_prefix, name))
def __setitem__(self, name, value):
return cache.set('%s:%s' % (self.key_prefix, name), value)
def __delitem__(self, name):
return cache.delete('%s:%s' % (self.key_prefix, name))
def has_key(self, name):
return cache.has_key(name)
def keys():
## Just fill the gap, as the cache object doesn't provide
## a method to list cache keys..
return []
然后替换这个:
projects_map = cache.get('projects_map')
projects_map.get('search term')
和:
projects_map = LazyCachedDict('projects_map')
projects_map.get('search term')