Почему кэш Redis Django не может получить данные в Redis - PullRequest
0 голосов
/ 23 октября 2018

Мои настройки кэша:

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, какthis:

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 голосов
/ 23 октября 2018

Кеш 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 мог их прочитать.

...