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

如何在Redis中存储数组对象并便捷查询指定键的祖先数据?

Redis存储与查询方案(针对给定JSON结构)

一、Redis存储方案

根据你的数据结构,推荐两种实用的存储方式,按需选择:

1. 使用Redis Hash结构(全版本兼容)

把整个数据集放在一个Hash里,R10、R11这类标识作为Hash的field,对应的value是该field下所有ancestors数据的JSON序列化字符串。

存储命令示例:

# 存储R10的数据
HSET your_dataset_key R10 '[{"ancestors": ["121", "122", "123"]}, {"ancestors": ["221", "222", "223"]}]'
# 存储R11的数据
HSET your_dataset_key R11 '[{"ancestors": ["1121", "1122", "1123"]}, {"ancestors": ["1221", "1222", "1223"]}]'
# 存储R12的数据
HSET your_dataset_key R12 '[{"ancestors": ["2121", "2122", "2123"]}, {"ancestors": ["2221", "2222", "2223"]}]'

这种方式的好处是能批量管理所有Rxx数据,单个field对应一组完整数据,查询和更新都很直接。

2. 使用Redis JSON模块(Redis 6.2+版本推荐)

如果你的Redis版本支持JSON模块,直接把整个JSON对象存入Redis的JSON类型键,保留原结构,后续可以用JSONPath直接查询指定字段,灵活性更高。

存储命令示例:

# 存入完整JSON结构
JSON.SET your_json_key $ '{"R10": [{"ancestors": ["121", "122", "123"]}, {"ancestors": ["221", "222", "223"]}], "R11": [{"ancestors": ["1121", "1122", "1123"]}, {"ancestors": ["1221", "1222", "1223"]}], "R12": [{"ancestors": ["2121", "2122", "2123"]}, {"ancestors": ["2221", "2222", "2223"]}]}'

这种方式能完全保留原数据结构,不需要额外序列化/反序列化,适合需要复杂查询的场景。

二、获取R10和R11的ancestors数据

针对上面两种存储方式,分别给出查询方法:

1. 基于Hash结构的查询

  • 获取单个Rxx的ancestors数据:
HGET your_dataset_key R10

拿到结果后在应用层解析成对象,即可提取每个元素的ancestors数组。

  • 批量获取R10和R11的数据:
HMGET your_dataset_key R10 R11

返回结果是两个序列化后的JSON字符串,对应R10和R11的完整数据。

2. 基于JSON模块的查询

  • 获取R10的ancestors数据:
JSON.GET your_json_key $.R10

直接返回R10对应的数组结构,包含所有ancestors对象。

  • 批量获取R10和R11的ancestors数据:
JSON.GET your_json_key $.R10 $.R11

返回包含R10和R11数据的JSON数组,无需额外解析外层结构。

  • 如果只想提取所有ancestors的纯数组(忽略外层对象),可以用这个JSONPath路径:
# 获取R10下所有ancestors数组
JSON.GET your_json_key $.R10[*].ancestors

返回结果直接是[["121","122","123"],["221","222","223"]]这种结构,更简洁。

内容的提问来源于stack exchange,提问作者Arun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:05:31