为什么 django redis 缓存无法获取 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 来设置数据并使用缓存来获取数据,我该怎么办?

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 序列化缓存值。默认情况下,它使用 Python pickle,但也有一个可用的 JSON 序列化程序,或者您可以选择自己的序列化程序。

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

相关内容

  • 没有找到相关文章

最新更新