【问题标题】:Django_redis lock fails with UnpicklingErrorDjango_redis 锁因 UnpicklingError 而失败
【发布时间】:2018-08-10 14:59:11
【问题描述】:

在我的代码的一个地方,我使用 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'. 为什么会发生这种情况?我做错了什么?

您可以使用此 sn-p 重现此行为:

from django.core.cache import cache
with cache.lock('hello'):
    cache.get('hello') 

【问题讨论】:

    标签: redis locking pickle django-redis


    【解决方案1】:

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

    随心所欲。

    【讨论】:

      猜你喜欢
      • 2023-03-02
      • 1970-01-01
      • 2018-02-16
      • 2013-02-24
      • 1970-01-01
      • 2012-10-03
      • 2014-07-16
      • 2021-11-23
      • 2018-10-04
      相关资源
      最近更新 更多