Получение ответа типа 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, он сохраняет и получает байты.

Другие вопросы по тегам