【发布时间】:2016-05-23 19:17:44
【问题描述】:
我曾经在全局变量中缓存数据库查询以加快我的应用程序。由于这是非常不建议的(并且确实产生了问题),我想使用任何类型的 Django 缓存来代替。我尝试了 LocMemCache 和 DatabaseCache,但两者都需要...大约 15 秒 来设置我的变量(比生成数据所需的时间长两倍,大小为 7MB)。
这是预期的吗?我是不是做错了什么?
(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']
【问题讨论】:
-
缓存腌制这个值,我并不奇怪需要这么长时间来腌制一个 7MB 的值。根据您要缓存的内容和使用它的目的,可能会有更好的方法。
-
这确实解释了,我完全错过了这一点。我绝对不想腌制它(显然 7MB RAM 不是问题)。我正在缓存在每次计算中重复使用的位掩码(二进制 numpy 数组)。你有什么建议吗?
-
我发现了这个:djangosnippets.org/snippets/2396。我对全局字典的唯一担心是我在使用缓存数组的计算中使用了多处理。
标签: django caching django-cache