Python, redis ошибка wrong number of arguments for hset command
изучаю редис(версия 4.0.2) посредством применения на практике.
Мне нужно по ключу(user_id) хранить словарь настроек.
language: строка с кодом языка
status: строка с местоположением пользователя в меню
country: текущая страна где находится пользователь
currency: текущая валюта пользователя
И в процессе мне необходимо извлекать все или некоторые ключи, менять их, добавлять новые.
нашёл в интернете пример, как раз хорошо подходящий мне:
import redis
redis_db = redis.StrictRedis(host='localhost', port=6379, db=1, charset='utf-8', decode_responses=True)
user_id = 847641313
language = 'en'
redis_db.hset(user_id, mapping={"language": language , "status": 0, "counry":'lalalalend', "currency": 'RUB'})
redis_db.hset(user_id, status, 1) # изменение ключа status
redis_db.hset(user_id, mapping={"fav_food": "пицца", "fav_drink": "квас"}) #добавление новых ключей
a = redis_db.hget(user_id, "language") # вернуть значение ключа language
попробовал применить, выбрасывается исключение
redis.exeption.ResponseError: wrong number of arguments for hset command
Использовать команду .set не подходит так как словари как тип данных не допускаются.
Использвать команду .hmset тоже не получается
Вызывается предупреждение
redis.hmset is deprecated. Use redis.hset (команда устарела)
Пошёл читать документацию, но там про ключ mapping вообще ни слова.
подскажите пожалуйста что я делаю не так.
Спасибо
Ответы (2 шт):
Если я правильно разобрался, для установки множества значений нужно использовать не hset, а hmset:
redis_db.hmset(user_id, mapping={"language": language , "status": 0, "counry":'lalalalend', "currency": 'RUB'})
redis_db.hset(user_id, status, 1) # изменение ключа status
redis_db.hmset(user_id, mapping={"fav_food: "пицца", "fav_drink": "квас"}) #добавление новых ключей
Но это касается версий Redis до 4.0.0, а после вообще-то hset должна работать со словарём, а hmset выдаёт предупреждение, что её использование устарело. Почему hset не работает - пока не могу понять.
Сам спросил - сам отвечаю.
OS windows 10 x64
redis 4.0.2
redis server - 3.0.504 (последний stable от MsOpenTech за 2016 год, новее не нашёл)
команда hset в таком виде будет вызывать исключение:
redis_db.hset(user_id, mapping={"language": "rus" , "status": 0, "counry":'lalalalend', "currency": 'RUB'})
а в таком будет:
redis_db.hset(user_id, mapping={"language": "rus"})
redis_db.hset(user_id, mapping={"status": 0})
redis_db.hset(user_id, mapping={"counry":'lalalalend'})
redis_db.hset(user_id, mapping={"currency": 'RUB'})
либо использовать hmset и игнорировать warning о устаревании команды.