原生的 Redis 数据类型哈希(映射)乍一看似乎与 JSON 对象或其他记录数据类型非常相似。 实际上,它要简单得多,只允许每个字段是字符串或数字,而不允许子字段。 但是,通过预先计算每个字段的“路径”,您可以展平对象并将其存储在 Redis 哈希映射中。
以下面的例子为例
{ "colour":"blue", "make":"saab", "model":{ "trim" : "aero", "name" : 93 }, "features":[ "powerlocks", "moonroof" ] }
使用 JSONPath,我们可以使用哈希映射在一层中表示每个项目。
> HSET car3 colour blue > HSET car3 make saab > HSET car3 model.trim aero > HSET car3 model.name 93 > HSET car3 features[0] powerlocks > HSET car3 features[1] moonroof
(为了清晰起见,显示为单独的命令,在脚本中,您将需要可变地使用 HSET)
这提供了一种获取整个对象的方法
> HGETALL car3 1) "colour" 2) "blue" 3) "make" 4) "saab" 5) "model.trim" 6) "aero" 7) "model.name" 8) "93" 9) "features[0]" 10) "powerlocks" 11) "features[1]" 12) "moonroof"
或对象的各个部分
> HGET car3 model.trim "aero"
虽然这可以提供一种快速、有用的方法来访问 Redis 中的存储对象,但它也存在缺点
此模式与 ReJSON 有显着重叠。 如果 ReJSON 可用,它通常是更好的选择。 以这种方式存储对象与 ReJSON 相比,有一个优点是它与另一个 Redis 命令集成: SORT。 但是,SORT 命令既是一个复杂的主题(超出此模式的范围),也是计算上复杂的,如果管理不当,可能会以无法很好地扩展的方式使用。