Redis系列:使用 Redis Module 扩展功能
2024/1/18 14:03:07
本文主要是介绍Redis系列:使用 Redis Module 扩展功能,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
★ Redis24篇集合
1 啥是Redis Module
Redis Module是Redis的一种扩展模块,从 4.0版本开始,允许用户自定义扩展模块,在Redis内部实现新的数据类型和功能,使用统一的调用方式和传输协议格式扩展Redis的能力。它本身的设计目的就是在不同版本的Redis中运行,因此无需重新编译模块即可与特定版本(Redis > 4.0)一起运行。
通过使用Redis Module,可以在Redis中添加新的命令和数据类型,以实现更高级的功能。例如,一些第三方模块支持全文搜索、JSON数据的存储和查询、自定义分布式锁、时间序列数据的存储和查询等。我们也可以基于 Redis 去定制开发属于自己的 Module,来支撑自己的业务发展。
2 有哪些常见的Redis Module
目前,被 Redis 官方推荐的 Module 有:
2.1 RediSearch
一个功能齐全,可实现 快速检索、二次索引和全文搜索的搜索引擎模块
地址:https://github.com/RediSearch/RediSearch
2.2 RedisJSON
RedisJSON是一个用于处理 JSON 数据的模块,它实现了JSON数据交换标准,允许从Redis 文档中存储、更新和获取JSON值。
地址:https://github.com/RedisJSON/RedisJSON
2.3 RedisTimeSeries
RedisTimeSeries是Redis的一个时间序列数据库(TSDB)管理模块。RedisTimeSeries可以保存多个时间序列,每个时间序列都可以通过一个Redis键访问(类似于任何其他Redis数据结构)。
地址:https://github.com/RedisTimeSeries/RedisTimeSeries
2.4 RedisGraph
用于实现图形数据库的模块
https://github.com/RedisGraph/RedisGraph?tab=readme-ov-file#trying-redisgraph
2.5 RedisBloom
RedisBloom为Redis增加了一组概率数据结构,包括Bloom filter(布隆过滤器), Cuckoo filter, Count-min sketch, Top-K和t-digest。使用此功能,您可以查询流数据,而无需存储流的所有元素。每种概率数据结构都应对不同的业务场景。
地址:https://github.com/RedisBloom/RedisBloom
2.6 RedisCell
实现分布式限流能力的模块,使用了相对精妙的算法 generic cell rate algorithm (GCRA) 。
地址:https://github.com/brandur/redis-cell
2.7 RedisAI
RedisAI是一个Redis模块,用于执行深度学习/机器学习模型并管理其数据。它的目的是成为模型服务的“主力军”,为流行的DL/ML框架提供开箱即用的支持和无与伦比的性能。RedisAI坚持数据本地化原则,最大限度地提高了计算吞吐量,减少了延迟。
地址:https://github.com/RedisAI/RedisAI
上面给出的几个都是GitHub小星星比较高的模块,如果你想要了解很多的内容,可以参考官方文档:https://redis.io/modules。
3 Redis module 实践指南
3.1 安装Redis
因为这些扩展模块是依赖于Redis服务存在的,所以前提是Redis安装完成。
Redis官方安装指南:https://redis.io/docs/install/install-redis/
3.2 以RedisJson 为例子
3.2.1 下载RedisJSON
github上下载ReJSON的地址:https://github.com/RedisJSON/RedisJSON/releases
官方使用文档:https://redis.io/docs/data-types/json/
可以看到,最新的版本是 v2.6.8
3.2.2 安装
1、获取文件
在 redis 安装目录下新建 module 文件夹,把获取到的rejson.so文件 放到 module 文件夹中
# 先进入redis的安装目录 cd /usr/local/soft/redis-6.2.6/ # 然后新建一个module文件夹 mkdir module # 最后rejson.so文件放到module文件夹即可
2、修改配置
# 进入到module目录下 cd ./module # 为文件加X,即修改rejson.so为可执行文件 chmod +x rejson.so # 修改 redis.conf,初始时自动 loadmodule loadmodule /usr/local/soft/redis-6.2.6/module/rejson.so # 重启 redis redis-cli -a 123456 shutdown redis-server conf/redis.conf redis-cli -p 6379
3.2.3 RedisJSON操作实践
1、写入JSON.SET
语法解析
JSON.SET <key> <path> <json> [NX | XX]
- key:要操作的键。
- path:JSON路径,用于指定要设置值的对象或数组的路径。
- json:要设置的JSON值。
- [NX | XX]:可选参数,用于指定操作的条件。
- NX:仅当指定的键不存在时,才设置值。
- XX:仅当指定的键存在时,才设置值。
比如下面,保存两条数据
# 保存两条记录 127.0.0.1:6379> JSON.SET user1 $ '{"name":"Brand", "age":18, "sex":"1"}' 127.0.0.1:6379> JSON.SET user2 $ '{"name":"Candy", "age":17, "sex":"0"}'
2、读取操作JSON.GET
语法解析
JSON.GET <key> [INDENT indentation-string] [NEWLINE line-break-string] [SPACE space-string] [path ...]
- Key:要获取值的键
- INDENT:查询结果替换掉默认缩进字符
- NEWLINE:查询结果替换掉默认换行符
- SPACE:查询结果替换掉默认空格
- path:允许使用多个path进行查询
- 获取JSON对象中的属性时需要以.开头
比如下面,获取相关信息
# 得到myjson的所有数据 127.0.0.1:6379> JSON.GET user1 1) '{"name":"Brand", "age":18, "sex":"1"}' # 得到json数据中的键name的值 127.0.0.1:6379> JSON.GET user1 name 1) "Brand"
3、批量读取操作JSON.MGET
这是一个批量操作的语法,语法解析:
JSON.MGET <key> [key ...] <path>
- key:是一个列表,指的是可以有多个key
- path:指所有key的path,即遍历每一个key的path,如果不存在,则返回null
下面的语句演示MGET获取批量数据:
127.0.0.1:6379> JSON.MGET user1 user2 $.name 1) "Brand" 2) "Candy"
4、除操作JSON.DEL
这是删除操作的语法,语法解析:
JSON.DEL <key> [path]
- path是可选参数,如果没有提供,则默认整个Key删除掉
下面语句中
# 删除整个Json 127.0.0.1:6379> JSON.DEL user1 (integer) 1 # 删除某个字段 127.0.0.1:6379> JSON.DEL user2 $.age 1) "17"
5、其他操作类行
除了上面的几种常见操作,官方还支持如下命令,官方命令地址:https://redis.io/docs/data-types/json/
常用命令(数字可以递增、相乘):
# JSON.NUMINCRBY,JSON.NUMMULTBY,JSON.STRAPPEND,JSON.STRLEN > JSON.SET num $ 0 OK > JSON.NUMINCRBY num $ 1 "[1]" > JSON.NUMINCRBY num $ 1.5 "[2.5]" > JSON.NUMINCRBY num $ -0.75 "[1.75]" > JSON.NUMMULTBY num $ 24 "[42]"
数组命令:
# JSON.ARRAPPEND,JSON.ARRINDEX,JSON.ARRINSERT,JSON.ARRLEN,JSON.ARRPOP,JSON.ARRTRIM > JSON.SET arr $ [] OK > JSON.ARRAPPEND arr $ 0 1) (integer) 1 > JSON.GET arr $ "[[0]]" > JSON.ARRINSERT arr $ 0 -2 -1 1) (integer) 3 > JSON.GET arr $ "[[-2,-1,0]]" > JSON.ARRTRIM arr $ 1 1 1) (integer) 1 > JSON.GET arr $ "[[-1]]" > JSON.ARRPOP arr $ 1) "-1" > JSON.ARRPOP arr $ 1) (nil)
对象命令(对象长度和key值输出):
# JSON.OBJKEYS,JSON.OBJLEN > JSON.SET obj $ '{"name":"Leonard Cohen","lastSeen":1478476800,"loggedOut": true}' OK > JSON.OBJLEN obj $ 1) (integer) 3 > JSON.OBJKEYS obj $ 1) 1) "name" 2) "lastSeen" 3) "loggedOut"
组件命令:
JSON.TYPE,JSON.DEBUG,JSON.FORGET,JSON.RESP
4 总结
本文介绍了Redis的扩展模块Redis Module,设计目的就是使用加载Redis Module,在Redis中添加新的命令和数据类型,以实现更高级的功能。
文章介绍了目前官方推荐的几个Module,并演示了RedisJSON的效果。
这篇关于Redis系列:使用 Redis Module 扩展功能的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧
- 2024-12-04Redis入门:简单教程详解
- 2024-11-29Redis开发入门教程:从零开始学习Redis
- 2024-11-27Redis入门指南:快速掌握Redis基础操作