在我的代码的一个地方,我使用django_redis来使用锁更新缓存:
from django.core.cache import cache
with cache.lock('hello'):
# do stuff
在另一个地方,我使用以下方法检查缓存是否未被锁定:
if not cache.get('hello'):
# do other stuff
但是,设置锁定后,get
调用将失败并显示UnpicklingError: invalid load key, 'f'.
为什么会发生这种情况?我做错了什么?
您可以使用以下代码段重现此行为:
from django.core.cache import cache
with cache.lock('hello'):
cache.get('hello')
答案 0 :(得分:0)
这不是很明显,但是据我了解,您的lock_key
和cache_key
一定不能相同。例如此代码:
cache_key = 'hello'
with cache.lock(cache_key):
cache.get(cache_key)
提高UnpicklingError: invalid load key...
。
与此同时,此代码:
cache_key = 'hello'
lock_key = cache_key + '_lock'
with cache.lock(lock_key):
cache.get(cache_key)
根据需要工作。