【问题标题】:redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a bytes, string, int or float firstredis.exceptions.DataError:类型输入无效:\'dict\'。首先转换为字节、字符串、整数或浮点数
【发布时间】:2023-01-18 18:04:46
【问题描述】:
目标:将dict()或{}作为键值对set()的值存储到雷迪斯.
代码
import redis
r = redis.Redis()
value = 180
my_dict = dict(bar=value)
r.set('foo', my_dict)
redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a bytes, string, int or float first.
【问题讨论】:
标签:
python
python-3.x
serialization
redis
byte
【解决方案1】:
您不能将字典对象作为 set() 操作中的值传递给 Redis。
但是,我们可以使用pickle 或json 来获取对象的Bytes。
恕我直言,无论您已经导入哪个都是最佳的。
泡菜
连载前set()
import pickle
my_dict = {'a': 1, 'b': 2}
dict_bytes = pickle.dumps(my_dict)
r.set('my_key', dict_bytes)
反序列化 post-get():
dict_bytes = r.get('my_key')
my_dict = pickle.loads(dict_bytes)
JSON
连载前set()
import json
my_dict = {'a': 1, 'b': 2}
dict_str = json.dumps(my_dict)
dict_bytes = bytes(dict_str, 'utf-8')
r.set('my_key', dict_bytes)
反序列化 post-get():
dict_bytes = r.get('my_key')
dict_str = dict_bytes.decode('utf-8')
my_dict = json.loads(dict_str)