我正在尝试创建一个缓存流,在用户请求它缓存一个870条记录的大字典,它应该保留在缓存中一段时间。当定义的时间传递给下一个请求时,应该在na缓存中更新dict。
所以我创造了这样一个功能:
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()后从缓存中消失,但有些值从一开始就丢失了。
有没有人知道它可能是什么? 或者也许如何以另一种方式解决所描述的流程?
答案 0 :(得分:2)
LocMemCache就是这样 - 本地内存缓存。这意味着它在特定服务器进程的本地,并且在其他进程或控制台中都不可见。
如果您需要在所有进程中共享的内容,则应使用适当的缓存后端,如memcached或redis。