Django_redis锁定失败,出现UnpicklingError

时间:2018-03-02 11:39:33

标签: redis locking pickle django-redis

在我的代码的一个地方,我使用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') 

1 个答案:

答案 0 :(得分:0)

这不是很明显,但是据我了解,您的lock_keycache_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)

根据需要工作。