You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 07:12:45