Получение ответа типа int или float из потока Redis и Python
Я добавляю данные в поток redis с целыми числами или числами с плавающей запятой
> XADD name 1-0 field 1
> XADD name 1-1 field 2
Затем у меня есть приложение на Python, которое считывает данные потока.
r = redis.Redis(host=HOST,port=PORT,decode_responses=True)
latest = r.xrevrange(
name="name",
count=1
)
#[[
# "1-1",
# {
# "field":"2" ##data is str not int
# }
#]]
Проблема в том, что результирующие данные в словаре всегда будут в строковом формате. Кто-то предложил мне использовать hiredis, но я не могу найти, как получить нестроковый вывод. Есть ли способ, которым redis или hiredis может автоматически приводить данные к правильному числовому типу? или нужно самому реализовывать кастинг?
2 ответа
Redis - это текстовая / двоичная база данных. Вставкаint
преобразует его в строку сразу после ввода.
Вы должны преобразовать ответ обратно в int
сами. Ответ декодирования только декодируетbytes
ответ на str
.
В качестве альтернативы используйте рассол перед хранением и после извлечения ваших объектов.
r.set('some_key', pickle.dumps(obj)
obj = pickle.loads(r.get('some_key'))
Что касается redis, он сохраняет и получает байты.