Значения Redis, установленные в Python, не отражаются в клиенте Redis - PullRequest
0 голосов
/ 21 ноября 2018

Я установил redis на мою OS X и пытаюсь установить и получить некоторые значения в Redis из клиента Python 3.5.У меня включен сервер Redis (с помощью команды redis-server) и клиент Redis (открыт с помощью команды redis-cli).Вот что я пытаюсь на Python:

import redis
r = redis.StrictRedis()
r.set("foo", "bar")
r.get("foo")

Это печатает bar, как и ожидалось.Однако, если я перейду к моему приглашению redis-client и попробую get foo, он вернет nil.Таким же образом, если я устанавливаю значение в самом Redis-клиенте, например set boo too, вызов get boo в клиенте возвращает too, как и ожидалось, однако, в моем клиенте Python, если я запускаю r.get(boo), яget None.

Забавно, они синхронизируются между своими экземплярами.Поэтому, если я открою другую командную строку Python и наберу r.get("foo"), она вернет bar.Таким же образом, если я открою другой экземпляр redis-cli и введу get boo, я получу too.Только значения между клиентом Python и клиентом Redis не синхронизируются.Я даже пытался принудительно установить bgsave в клиенте Python после установки значения, и он вызвал сохранение в окне, где работает redis-server, но значения не отражаются в окне redis-cli даже после этого.

Они работали отлично, пока несколько дней назад это не началось в последнее время.

Есть идеи, как это исправить?

1 Ответ

0 голосов
/ 21 ноября 2018

Мне кажется, что вы обращаетесь (устанавливаете / получаете значения) через разные db s в вашем redis-cli и вашем redis-py экземпляре.redis серверы могут иметь несколько хранилищ значений ключей (или «таблиц»), полностью изолированных друг от друга.Они упоминаются в документации как db и однозначно идентифицируются целыми числами.

Если вы вписываете redis-py точно так же, как в вашем фрагменте кода, с:

import redis
r = redis.StrictRedis()

Тогдавы используете значение конструктора по умолчанию для дБ, которое составляет 0 .( См. Документацию )

Если значения отличаются между реализацией Python и redis-cli, то, скорее всего, ваш клиент командной строки работает на db, отличном от 0. Вы можете проверитьdb, над которой вы работаете, с помощью команды CLIENT LIST , которая будет возвращать ваш текущий идентификатор базы данных.

Чтобы переключиться на ту же базу данных, что и реализация Python, просто запустите на вашем redis-cli:

SELECT 0

( См. Документацию )

Или, альтернативно, вы можете вызвать конструктор redis-py с нужным параметром db:

r = redis.StrictRedis(db=3) # 3 is an example value for your redis-cli's working db
...