我曾经在全局变量中缓存数据库查询以加速我的应用程序。由于这是强烈unadvised(并且它产生了问题),我想要使用任何类型的Django缓存。我尝试了LocMemCache和DatabaseCache,但都采取...约15秒设置我的变量(比生成数据所需的时间长两倍,即7MB大小)。写入Django缓存的速度非常慢
这是预期的吗?难道我做错了什么 ?
(Memcached限制为1MB,我不能分割我的数据,它包含任意大的二进制掩码)。
编辑:FileBasedCache也需要30秒才能设置。
Settings.py:
CACHES = {
'default': {...},
'stats': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
# or 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'stats',
},
}
Service.py:
from django.core.cache import caches
def stats_service():
stats_cache = caches['stats']
if stats_cache.get('key') is None:
stats_cache.set('key', data) # 15s with DatabaseCache, 30s with LocMemCache
return stats_cache.get('key')
全局变量(超快速)版本:
_cache = {}
def stats_service():
if _cache.get('key') is None:
_cache['key'] = data
return _cache['key']
缓存pickles的价值,我并不感到惊讶,需要如此长的时间来腌制一个7MB的值。根据你缓存的内容和你使用的内容,可能有更好的方法。 – knbk
这确实解释了,我完全错过了这一点。我绝对不想腌它(显然7MB内存不是问题)。我缓存位掩码(二进制numpy数组),我在每次计算中都重用。你有什么建议吗? – JulienD
我发现这个:https://djangosnippets.org/snippets/2396/。我唯一担心的是全局字典是我在使用缓存数组的计算中使用多处理。 – JulienD