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)
Удачи В Кодировании! :-)