RedisJSON 是 Redis 的扩展模块,支持原生 JSON 数据格式的存储和操作,提供高效的 JSON 路径查询语法(类似JSONPath),支持:
-
完整 JSON 文档的存储;
-
原子化局部更新;
-
嵌套结构快速查询;
-
与其他 Redis 数据类型(如 Streams)结合使用。
01 RedisJSON 配置
1.1 RedisJSON配置
由于 RedisJSON是Redis的扩展模块,所以需要将该模块加载到Redis中去。 RedisJSON的模块来自Redis Statck的lib中
的resjon.so模块,配置到Redis的配置文件redis.conf中即可:
loadmodule /opt/redis-stack-6.2.6/lib/rejson.so
02 基本语法
2.1 数据类型的支持
-
字符串(String);
-
数字类型(Number);
-
布尔类型(Boolean);
-
数组(Array);
-
对象(Object);
-
null
2.2 核心命令
# 设置值(路径必须从根开始)
JSON.SET <key> $ <json_value>
# 获取值
JSON.GET <key> [<path>]
# 删除字段
JSON.DEL <key> <path>
# 类型检查
JSON.TYPE <key> <path>
# 数字累加
JSON.NUMINCRBY <key> <path> <value>
# 数组操作
JSON.ARRAPPEND <key> <path> <value...>
JSON.ARRINDEX <key> <path> <value>
03 使用场景
3.1 典型场景
-
配置管理: 存储动态配置的嵌套结构;
-
用户会话: 保存包含多种属性的用户会话数据 ;
-
实时分析 : 快速更新统计指标中的部分字段 ;
-
内容存储: CMS 系统存储文章内容及元数据 ;
-
设备状态: IoT 设备复杂状态的原子更新 。
3.2 优势体现
-
需要频繁局部更新的场景 ;
-
涉及多层嵌套查询的场景 ;
-
需要结合 Redis 其他功能的场景(如过期时间) ;
-
涉及多层嵌套查询的场景 ;
04 命令行示例
4.1 基础操作
# 插入用户数据
JSON.SET user:1001 $ '{
"name":"张三",
"age":28,
"address":{
"city":"北京",
"zipcode":"100000"
},
"tags":["tech","sports"]
}'
# 获取城市信息
JSON.GET user:1001 $.address.city
# 返回:"[\"北京\"]"
# 修改年龄(原子操作)
JSON.SET user:1001 $.age 29
# 年龄+10(原子操作)
JSON.NUMINCRBY user:1001 $.age 10
# 添加标签
JSON.ARRAPPEND user:1001 $.tags '"music"'
4.2 路径查询
# 获取所有标签的第一个元素
JSON.GET user:1001 $.tags[0]
# 使用通配符查询
JSON.GET user:1001 $.address.*
** END **
喜欢就点赞、收藏,微信可以搜公众号【编程朝花夕拾】或扫码关注我哦!