Redis 扩展模块 -- RedisJSON 的安装方法
摘要
- 本文介绍 Redis 扩展模块 – RedisJSON 的安装方法
- 本文基于
redis-7.4.7,springboot-3.5.8 - 操作系统:
Amazon Linux 2023(内核 6.1) - Redis官网:https://redis.io/
- Redis 命令文档:https://redis.io/docs/latest/commands/
RedisJSON 简介
-
RedisJSON 是 Redis 官方维护的一个扩展模块,隶属于
Redis Stack,专门用于对JSON数据进行操作。 -
该模块以
Redis Module方式加载,可无缝集成到现有 Redis 实例中。 -
Redis8+,RedisJSON 已经内置在 Redis 中,可以在安装redis同时安装全部 Stack 模块。
安装 RedisJSON
-
虽然Redis Cloud的
Download Center中提供了所有Redis模块编译后的.so文件,但是并不保证一定兼容,所以最稳妥的方式是通过源码自己编译。
安装时需要科学上网,主要是安装依赖时需要从海外网下载,如果要部署在国内服务器,可能会连接失败。
可以在海外的相同配置的服务器上进行编译,之后将编译好的rejson.so上传到国内服务器即可。
-
安装依赖
1 | sudo dnf install -y \ |
-
编译RedisJSON
1 | mkdir -p /usr/local/soft/modules/ |
./sbin/setup 报错
- 本人使用的是 Amazon Linux 2023(内核 6.1),即
EL9,类似于CentOS 9,第一次运行会报错,大致报错信息如下:
1 | ./sbin/setup |
-
错误分析与解决方法:
-
这里实际上是两个错误,第一个错误与安装 RedisBloom 时一样,禁用掉
install_raven即可,具体参见 Redis 扩展模块 -- RedisBloom 的安装方法 进行修改。 -
第二个错误还是操作系统的事,在
deps/readies/bin/getclang中有一个方法,其实一看就明白了
1
2
3
4
5
6
7
8
9
10def redhat_compat(self):
if not self.modern:
return
self.run("%s/bin/getepel" % READIES, sudo=True)
if self.dist in ['centos', 'ol'] and self.os_version[0] >= 8:
self.install("clang")
self.install("llvm-toolset")
else:
self.install("llvm-toolset-7.0")
self.cp_to_profile_d("/opt/rh/llvm-toolset-7.0/enable", "llvm-toolset-7.0.sh")我使用的机器不是 centos,所以就走
else的逻辑了,另外这里即便走了 centos 逻辑,也有问题,就是el9中已经没有llvm-toolset了,取而代之的是llvm,所以需要修改该方法- 修改方法如下:
1
2
3
4
5
6
7def redhat_compat(self):
if not self.modern:
return
self.run("%s/bin/getepel" % READIES, sudo=True)
# 去掉判断,直接安装,前提是 el9,当然这里也可以什么都不写,而是通过命令行安装:dnf install -y clang llvm llvm-devel
self.install("clang")
self.install("llvm") -
Redis 启用模块
-
将生成的
rejson.so拷贝到 redis 的 modules 目录下(非必须),目录不存在则创建
1 | # 注意 .so 文件需要包含可执行权限 |
-
本文采用
loadmodule加载模块
1 | # 将 rejson.so 添加到 redis.conf 中,需要重启 redis |