Почему кэш 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 ответ

Решение

Кеш Django добавляет префикс для кеширования ключей. По умолчанию это зависит от KEY_PREFIXа также VERSION в вашем CACHES Настройки. Вы также можете настроить поведение с помощью пользовательских 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 мог их прочитать.

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