如何将Redis OM的HashModel存储到Redis Stream?求最优实践
最优精简的Redis-OM Model存储与解析实践
核心思路:复用Redis-OM原生序列化/反序列化能力
Redis-OM Model本身提供了配套的序列化和反序列化方法,完全不需要额外冗余的JSON处理,既精简又能保证类型安全。
方式一:JSON格式(可读性优先)
存储(精简写法)
直接调用Model的json()方法生成标准JSON字符串,无需额外json.dumps包装:
r.xadd(name="myStream", fields={"sensor_data": sensorSignal.json()})
原写法问题:
json.dumps(sensorSignal.json())会把JSON字符串再次转义(比如{"temp":25}变成"{\"temp\":25}"),既增加数据体积,又给解析多添了不必要的步骤。
解析(一键还原)
用Model的from_json()方法直接从JSON字符串还原为原模型:
# 假设从Stream取出的条目为stream_entry,目标字段是sensor_data sensor_signal = SensorSignal.from_json(stream_entry["sensor_data"])
方式二:二进制MsgPack格式(性能/体积优先)
如果追求更小的数据体积和更快的序列化速度,Redis-OM支持MsgPack二进制序列化:
存储
使用Model的pack()方法生成二进制数据:
r.xadd(name="myStream", fields={"sensor_data": sensorSignal.pack()})
解析
用Model的unpack()方法从二进制数据还原模型:
sensor_signal = SensorSignal.unpack(stream_entry["sensor_data"])
优势:MsgPack比JSON体积小30%-50%,序列化/反序列化速度更快,适合高吞吐量的Stream场景。
关键注意事项
- 消费者端必须使用相同版本的Redis-OM和完全一致的Model定义,避免版本差异导致的序列化不兼容。
- 不要手动修改序列化后的字符串或二进制数据,否则会直接导致解析失败。
内容的提问来源于stack exchange,提问作者feder
相关产品推荐
相关产品推荐

