Python-redis keys () возвращает список байтовых объектов вместо строк

Я использую обычный redis пакет для подключения моего кода Python к моему серверу Redis.

как часть моего кода я проверяю, существует ли строковый объект в моих ключах сервера Redis.

string = 'abcde'
if string in redis.keys():
  do something..

по некоторым причинам, редис.keys () возвращает список с объектами bytes, такими как [b'abcde'], в то время как моя строка, конечно,str "объект".

Я уже пытался установить charset, encoding и decode_responses в моем генераторе redis, но это не так помощь.

моя цель-вставить данные как строку вперед, а не перебирать список ключей и изменять каждый элемент на str() при его проверке.

спасибо впереди

2 ответов


вам было бы лучше использовать команда и реструктуризация кода, как:

string = 'abcde'
if redis.exists(string):
    do something..

операция ключей возвращает каждый ключ в базе данных Redis и приведет к серьезному снижению производительности в производстве. В качестве побочного эффекта вам не придется иметь дело с преобразованием двоичного кода в строку.

вы можете настроить клиент Redis для автоматического преобразования ответов из байтов в строки с помощью до StrictRedis конструктор:

r = redis.StrictRedis('localhost', 6379, charset="utf-8", decode_responses=True)

убедитесь, что вы последовательны с между клиентами.


Если вы не хотите повторять список для декодирования, установите соединение redis для автоматического выполнения декодирования, и вы получите требуемый результат. Как следует из строки подключения, обратите внимание на аргумент decode_responses:

rdb = redis.StrictRedis(host="localhost", charset="utf-8", port=6379, db=0, decode_responses=True)

Удачи В Кодировании! :-)