3

我的缓存设置:

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设置数据并使用缓存获取数据,我该怎么办?

4

1 回答 1

3

Django 缓存为缓存键添加了一个前缀。默认情况下,这取决于您的KEY_PREFIX设置。您还可以使用自定义来自定义行为。VERSIONCACHESKEY_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 可以读取它。

于 2018-10-23T12:17:45.713 回答