为什么Django Redis缓存无法在Redis中获取数据

时间:2018-10-23 12:04:06

标签: django redis django-redis

我的缓存设置:

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        'OPTIONS': {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        },
    }
}

主机为127.0.0.1,端口为6379,数据库为1。

我想通过使用redis_connection来添加数据,如下所示:

from django_redis import get_redis_connection

redis_conn = get_redis_connection('default')
redis_conn.set('somekey', 'somevalue')

所以redis数据库现在有了数据,我可以通过以下方式获取它:

redis_conn.get('somekey')

但是尽管数据库中存在数据,但我无法通过django.core.cache.cache来获取它:

from django.core.cache import cache
cache.get('somekey')  #return None

如果必须使用conn设置数据并使用缓存来获取数据,该怎么办?

1 个答案:

答案 0 :(得分:1)

Django缓存为缓存键添加了前缀。默认情况下,这取决于您的CACHES设置中的KEY_PREFIXVERSION。您还可以使用自定义KEY_FUNCTION自定义行为。

您可以使用make_key方法找出完整的缓存键:

>>> from django.core.cache import cache
>>> cache.make_key('somekey')
':1:somekey'

呼叫redis_conn.set()时可以使用此完整键。

正如您在评论中指出的那样,还有第二个困难。 Django-redis serializes the cache values。默认情况下,它使用Python pickle,但也提供JSON序列化程序,或者您可以选择自己的序列化程序。

使用redis_conn.set()写入缓存时,必须以相同的方式序列化数据,以便django-redis可以读取它。