Сбой блокировки Django_redis с UnpicklingError

В одном месте моего кода я использую 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 ответ

Это не очень очевидно, но, как я понимаю, ваш 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)

работает как хочешь.

Другие вопросы по тегам