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