*Redis JSON.SET 命令
JSON.SET 在 RedisJSON 中设置指定路径的 JSON 值,如果路径不存在则创建。
*语法
JSON.SET key path value [NX | XX]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | JSON 文档键名 |
| path | String | 是 | JSONPath 路径 |
| value | String | 是 | JSON 值 |
| NX | Flag | 否 | 仅在路径不存在时设置 |
| XX | Flag | 否 | 仅在路径已存在时设置 |
*返回值
- OK:设置成功
- Nil:条件不满足(NX/XX)
- Error:JSON 格式无效
*时间复杂度
O(N),N 为设置的 JSON 值大小
*示例
*设置整个文档
> JSON.SET doc $ '{"a": 1, "b": 2}'
OK
*设置路径
> JSON.SET doc $.c '"hello"'
OK
> JSON.GET doc
"{\"a\":1,\"b\":2,\"c\":\"hello\"}"
*条件设置
> JSON.SET doc $.d '10' NX
OK
> JSON.SET doc $.d '20' NX
(nil)
> JSON.SET doc $.d '20' XX
OK
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR invalid JSON string | JSON 格式无效 | 确认 value 是有效的 JSON |
| ERR path error | 路径无效 | 确认路径语法正确 |
*最佳实践
- 使用 JSONPath 精确定位设置路径
- 使用 NX/XX 实现条件设置
- 注意 JSON 字符串需要正确转义
*FAQ
Q1: 路径不存在会怎样? A: 会创建路径(如果路径语法允许)。
Q2: 可以设置数组元素吗? A: 可以,通过数组索引路径设置。
Q3: 和 JSON.MSET 有什么区别? A: JSON.SET 设置单个 key;JSON.MSET 设置多个 key。