0
我想做一个缓存流,在用户请求缓存一个870记录的大字典,它应该留在缓存一段时间。当定义的时间在下一次请求时传递时,字典应该在na缓存中更新。Django缓存,丢失密钥
所以我创造了这样一个功能:
from django.core.cache import get_cache
def update_values_mapping():
cache_en = get_cache('en')
values_dict = get_values_dict() <- this make a request to obtain the dict with values
cache_en.set_many(values_dict, 120) # 120s for testing
cache_en.set('expire', datetime.datetime.now() + datetime.timedelta(seconds=120))
然后在第二个功能,我尝试从缓存
from django.core.cache import get_cache
def get_value_details(_id):
cache = get_cache('en')
details = cache.get(_id, {}) # Values in cache has expire date so they should eventually be gone
expire = cache.get('expire', None)
if not details and expire and expire < datetime.now():
update_values_mapping()
value = cache.get(_id, {})
return details
得到的值在渲染视图get_value_details()被调用多次获取所有需要的值。
问题是某些值缺失,例如cache.get('b',{})返回{}即使值'b'被保存到缓存(并且过期日期还没有通过)。缺失值正在改变,有时是'a',有时'b',其他时间'c'等。
我一直在LocMemCache和DummyCache上测试它到目前为止。 我的例子缓存设置:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'cache-default'
},
'en': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'cache-en'
},
'pl': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'cache-pl'
}
}
当我与打在控制台一些值从缓存update_values_mapping()的下一次调用后消失,但有些人从一开始就下落不明。
有没有人有任何线索可能是什么? 或者,也许如何解决另一种方式描述的流程?