文档型存储与路径读写
JSON 扩展把文档按树结构存储,支持按路径读写单个字段:整体写入后用带路径的取命令读某一段,数值字段可以原子递增,数组可以追加与删除。相比把整份 JSON 塞进字符串再读改写,它避免了取整块、改一处、写回整块的放大,字段级更新频繁的对象受益最明显。
基本信息
| 前置依赖 | 需要 JSON 能力:老版本靠独立模块或整合发行版提供,新版已并入主体 |
|---|---|
| 常用命令 | 写入、读取、数值递增、数组追加、删除路径、查看类型 |
| 路径语法 | 以 $ 开头的路径表达式,旧式点号路径仍兼容 |
| 确认可用 | MODULE LIST 查看已加载模块,或直接执行一次读命令验证 |
典型使用场景
- 用户档案与配置对象:字段多、更新频繁,只想改其中一个字段
- 计数器与开关:文档里某个数值字段需要原子递增或翻转
- 条件写入:只在字段不存在时写入或只在存在时更新
- 检索联动:与全文检索类能力配合,把文档字段做成可查询的索引
使用示例
使用示例
redis-cli JSON.SET user:1 $ '{"name":"alice","vip":1,"tags":["a","b"]}' # 整体写入
redis-cli JSON.GET user:1 $.name # 按路径取值
redis-cli JSON.GET user:1 '$' # 取整份文档,$ 路径返回数组包裹
redis-cli JSON.NUMINCRBY user:1 $.vip 1 # 数值字段原子递增
redis-cli JSON.ARRAPPEND user:1 $.tags '"c"' # 数组尾部追加元素
redis-cli JSON.TYPE user:1 $.tags # 查看字段类型
redis-cli JSON.DEL user:1 $.vip # 删除指定字段
redis-cli MODULE LIST | grep -i json # 确认模块是否已加载常用命令速查
| 命令 | 作用 | 要点 |
|---|---|---|
| 写入命令 | 写入或替换路径下的值 | 支持仅在不存在时新建或仅在存在时更新的选项 |
| 读取命令 | 读取路径对应的值 | $ 路径返回数组包裹,未命中返回空数组 |
| 数值递增 | 对数值字段原子增减 | 字段不是数字会直接报错 |
| 数组追加 | 在数组尾部追加元素 | 参数是 JSON 字面量,字符串需要带引号 |
| 删除路径 | 删除指定路径 | 删除根路径等同于删除整个键 |
| 查看类型 | 返回字段的类型 | 排查写入不符合预期时很有用 |
用 $ 路径取值返回的是匹配结果数组,取单个字段也会多一层包裹;旧式点号路径继续可用并返回原始值。从旧路径迁移的脚本要注意这个差异,否则类型判断会出错。
没有加载对应能力的实例执行这些命令会直接返回未知命令错误。容器化部署时先确认镜像里带的是整合发行版,还是需要额外挂载模块文件,否则上线后才发现命令不可用。
对根路径整体写入会替换整份文档,未包含的字段会消失,它不是单字段更新。需要改一个字段就用带路径的写入,避免误删其余字段。