加载RedisJSON报Unable to load redis module及panic错误如何解决?
问题根因
本次崩溃的核心原因是RedisJSON依赖的redis-module Rust库调用了当前Redis实例不存在的接口,90%以上的此类报错都是Redis版本与RedisJSON版本不兼容导致,其余可能为编译环境异常、权限问题。
修复步骤
- 第一步:校验版本兼容性
执行redis-server -v查看当前Redis版本,你编译的RedisJSON版本要求Redis最低为6.2版本,若当前Redis版本低于6.2,优先升级Redis到6.2及以上正式版,版本匹配后重新尝试加载模块即可解决绝大多数问题。
如果你不想升级Redis,可以拉取对应你Redis版本的RedisJSON旧版源码重新编译,不要直接拉取最新主干代码编译。 - 第二步:校验编译环境
如果你已经确认版本匹配,重新编译RedisJSON:
执行rustc --version确认Rust版本≥1.59,版本不符的话用rustup切换到符合要求的Rust版本后,清空之前的编译产物,重新执行编译命令生成新的rejson.so文件。 - 第三步:处理权限问题
你用sudo启动Redis服务,root用户可能无权限读取普通用户家目录下的rejson.so文件:- 执行
sudo cp /home/username/RedisJSON/target/release/rejson.so /usr/lib/redis/modules/ - 执行
sudo chmod 644 /usr/lib/redis/modules/rejson.so - 执行
sudo redis-server --loadmodule /usr/lib/redis/modules/rejson.so尝试加载
- 执行
- 第四步:修复前置警告(可选但建议操作)
日志里的两个警告虽不是直接崩溃原因,但会影响Redis运行稳定性:- 修复overcommit_memory配置:
临时生效执行sudo sysctl vm.overcommit_memory=1,永久生效将vm.overcommit_memory = 1写入/etc/sysctl.conf文件 - 关闭透明大页:
临时生效执行sudo echo never > /sys/kernel/mm/transparent_hugepage/enabled,永久生效将上述命令写入/etc/rc.local文件
配置完成后重启Redis再加载模块即可。
- 修复overcommit_memory配置:
内容的提问来源于stack exchange,提问作者Ercross
相关产品推荐
相关产品推荐

