2016-09-16 9 views
2

Я установил значение для сервера Redis извне, используя скрипт python.Значения кеша Django Redis

r = redis.StrictRedis(host='localhost', port=6379, db=1) 
r.set('foo', 'bar') 

И попытался получить значение из веб-запроса, используя кеш django внутри views.py.

from django.core.cache import cache 
val = cache.get("foo") 

Возврат Нет. Но когда я пытаюсь получить его форму

from django_redis import get_redis_connection 
con = get_redis_connection("default") 
val = con.get("foo") 

Он возвращает правильное значение «bar». Как работают кеширование и прямые соединения?

ответ

2

Библиотеки обычно используют несколько внутренних префиксов для хранения ключей в redis, чтобы не ошибиться с определяемыми пользователем ключами.

Например, django-redis-cache, добавляет «: 1:» к каждому сохраненному в нем ключу.

Так, например, когда вы делаете r.set('foo', 'bar'), он устанавливает ключ, «: 1: foo». Поскольку вы не знаете префикса, добавленного к вашему ключу, вы не можете получить ключ, используя обычный get, вы должны использовать его собственный API для получения.

r.set('foo', 'bar') 

r.get('foo') # None 
r.get(':1:foo') # bar 

Таким образом, в конце концов, он возвращается в библиотеку вы используете, почитайте код для него и посмотреть, как это точно сохраняет ключи. redis-cli может быть вашим ценным другом здесь. В основном установите ключ с cache.set('foo', 'bar') и перейдите в redis-cli и проверьте с помощью команды «keys *», чтобы узнать, какой ключ был установлен для foo.

+0

Спасибо. Ключ хранится в redis, это «foo». и когда я устанавливаю использование кеша django, это сохраняется, как вы сказали. ": 1: foo" Но когда я получаю его из cache.get (''), он возвращает null, даже если правильный ключ находится в базе данных. –

+0

@KareshArunakirinathan Вы хотите получить его с помощью * cache.get ("foo") * return None? – SpiXel

Смежные вопросы