尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
RedisJSON模块编译安装与生产部署指南
1. RedisJSON 模块概述RedisJSON 是 Redis 官方维护的一个高性能 JSON 数据处理模块它允许 Redis 原生支持 JSON 格式数据的存储和操作。作为 Redis Stack 的重要组成部分这个模块通过扩展 Redis 命令集的方式为开发者提供了完整的 JSON 操作能力。在 Redis 8.0 及更高版本中RedisJSON 已经作为内置模块包含在 Redis Stack 发行版中。但对于仍在使用 Redis 7.x 版本的用户需要通过手动编译安装的方式集成该模块。本文将以 Redis 7.4.7 版本为例详细介绍从源码编译到生产部署的完整过程。提示在生产环境部署前建议先在测试环境验证模块兼容性。不同 Linux 发行版可能存在依赖库差异。2. 环境准备与依赖安装2.1 基础环境说明本次安装环境配置如下操作系统Amazon Linux 2023内核版本 6.1Redis 版本7.4.7编译器GCC 11.3.1系统包管理器DNFYUM 的下一代替代品2.2 开发工具链安装编译 RedisJSON 需要完整的开发环境支持。执行以下命令安装基础编译工具sudo dnf install -y \ gcc \ gcc-c \ make \ cmake \ autoconf \ automake \ libtool \ pkgconfig \ openssl-devel这些工具包提供了GCC/GC/C 编译器套件Make构建自动化工具CMake跨平台构建系统开发库头文件openssl-devel 等2.3 Rust 工具链安装RedisJSON 的编译依赖 Rust 语言环境需要安装 rustup 工具链管理器curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh安装过程中会提示选择安装选项通常选择默认配置选项1即可。安装完成后需要使环境变量生效source $HOME/.cargo/env验证安装是否成功rustc --version # 应显示 1.70.0 或更高版本 cargo --version # 应显示对应的 Cargo 版本3. RedisJSON 源码编译3.1 获取源代码建议在 /usr/local/soft/modules/ 目录下进行操作mkdir -p /usr/local/soft/modules/ cd /usr/local/soft/modules git clone --recursive https://github.com/RedisJSON/RedisJSON.git cd RedisJSON git checkout v2.8.16 # 使用稳定版本注意--recursive参数确保同时克隆子模块。如果克隆时遗漏可后续执行git submodule update --init --recursive3.2 依赖项配置运行 setup 脚本自动配置环境./sbin/setup该脚本会检查并安装缺失的依赖项配置编译环境设置 Python 测试环境3.3 常见问题解决在 Amazon Linux 2023 上可能遇到以下问题问题1raven-release 安装失败错误信息示例[FAILED] raven-release.el9.noarch.rpm: Status code: 403解决方案 修改deps/readies/bin/getepel文件注释掉install_raven相关调用。问题2LLVM 工具链问题错误信息示例command failed: /usr/local/soft/modules/RedisJSON/deps/readies/bin/getclang --modern解决方案 修改deps/readies/bin/getclang文件中的redhat_compat方法def redhat_compat(self): if not self.modern: return self.run(%s/bin/getepel % READIES, sudoTrue) self.install(clang) self.install(llvm)3.4 执行编译完成环境配置后执行正式编译make成功编译后生成的模块文件位于bin/linux-x64-release/rejson.so编译过程通常需要 5-10 分钟取决于机器性能。如果遇到内存不足的情况可以尝试增加 swap 空间。4. 模块部署与验证4.1 部署模块文件将编译好的模块文件复制到 Redis 的模块目录mkdir -p /usr/local/soft/redis-7.4.7/modules cp bin/linux-x64-release/rejson.so /usr/local/soft/redis-7.4.7/modules/ chmod x /usr/local/soft/redis-7.4.7/modules/rejson.so # 确保有执行权限4.2 配置 Redis 加载模块修改 redis.conf 配置文件添加以下内容loadmodule /usr/local/soft/redis-7.4.7/modules/rejson.so然后重启 Redis 服务使配置生效redis-server /path/to/redis.conf4.3 验证模块加载使用 redis-cli 连接服务器验证模块是否加载成功redis-cli --user admin --pass 123456 127.0.0.1:6379 MODULE LIST成功加载时应该看到类似输出1) 1) name 2) ReJSON 3) ver 4) (integer) 20816 5) path 6) /usr/local/soft/redis-7.4.7/modules/rejson.so 7) args 8) (empty array)也可以通过 INFO 命令查看127.0.0.1:6379 INFO Modules # Modules module:nameReJSON,ver20816,api1,filters0,usedby[],using[],options[handle-io-errors]5. 生产环境注意事项5.1 版本兼容性RedisJSON 2.x 版本要求 Redis 6.0不同 RedisJSON 版本对 Redis 的兼容性可能有差异建议在升级 Redis 主版本时重新编译模块5.2 性能调优对于高负载环境建议调整以下配置参数# 在 redis.conf 中增加 rejson.maxmemory_policy allkeys-lru rejson.threads 4 # 根据CPU核心数调整5.3 安全建议模块文件应存放在只有 Redis 用户有权限访问的目录定期检查模块是否有安全更新限制对 JSON 命令的访问权限通过 ACL5.4 监控指标重要的监控指标包括rejson.memory_usedJSON 数据占用的内存rejson.commands_processed处理的命令数量rejson.errors错误计数可以通过以下命令获取127.0.0.1:6379 INFO ReJSON6. 基本使用示例6.1 存储 JSON 文档127.0.0.1:6379 JSON.SET user:1 $ {name:John,age:30,address:{city:New York}} OK6.2 查询字段值127.0.0.1:6379 JSON.GET user:1 $.name [\John\]6.3 更新字段127.0.0.1:6379 JSON.SET user:1 $.age 31 OK6.4 数组操作127.0.0.1:6379 JSON.SET user:1 $.hobbies [reading,swimming] OK 127.0.0.1:6379 JSON.ARRAPPEND user:1 $.hobbies {sport:tennis} (integer) 37. 高级功能探索7.1 索引与搜索RedisJSON 可以与 RediSearch 模块配合实现 JSON 文档的全文搜索127.0.0.1:6379 FT.CREATE userIdx ON JSON SCHEMA $.name AS name TEXT $.age AS age NUMERIC OK 127.0.0.1:6379 FT.SEARCH userIdx age:[30 40]7.2 原子操作所有 RedisJSON 命令都是原子操作适合需要强一致性的场景127.0.0.1:6379 JSON.MSET user:1 $.name Alice user:2 $.name Bob OK7.3 批量操作使用管道(pipeline)提高批量操作效率echo JSON.SET doc1 $ {\id\:1} JSON.SET doc2 $ {\id\:2} JSON.MGET doc1 doc2 $.id | redis-cli --pipe8. 故障排查指南8.1 模块加载失败现象Redis 启动时报模块加载错误可能原因模块文件路径不正确文件权限问题版本不兼容解决方案检查 redis.conf 中的路径是否正确确保 redis 用户有读取权限验证模块与 Redis 版本兼容性8.2 命令未找到现象执行 JSON 命令返回 (error) ERR unknown command可能原因模块未正确加载命令拼写错误解决方案使用MODULE LIST确认模块已加载检查命令语法参考官方文档8.3 性能问题现象JSON 操作响应缓慢可能原因大文档操作复杂路径查询内存不足解决方案避免存储过大的 JSON 文档简化查询路径增加服务器内存9. 最佳实践建议文档设计保持 JSON 结构扁平化避免深层嵌套超过3层将大数组拆分为多个键查询优化使用特定路径而非通配符对频繁查询的字段建立 RediSearch 索引利用管道批量操作内存管理监控 JSON 数据内存使用设置合理的 maxmemory-policy考虑对冷数据使用 JSON.DEL 释放内存高可用在主从架构中确保所有节点加载相同模块版本哨兵模式下模块需在每个实例上单独配置集群模式下模块需在所有节点部署10. 版本升级策略当需要升级 RedisJSON 版本时建议采用以下步骤在测试环境验证新版本兼容性备份现有数据逐个节点滚动升级停止 Redis 实例替换模块文件重启实例验证数据完整性监控系统稳定性对于关键业务系统建议在低峰期进行升级操作并准备好回滚方案。
RELATED

相关推荐

小型C编译器源码解析:从词法分析到代码生成的完整流程

小型C编译器源码解析:从词法分析到代码生成的完整流程

简介:这份资源是一套小型C编译器的完整源代码,面向希望从代码层面理解编译原理的开发者与计算机专业学生,可用于学习词法分析、语法分析、语义检查、优化与代码生成等编译流程,也适合作为自研编译器的入门参考。压缩包共86个文件&…

📅 2026/11/6 6:58:36
Jmeter接口测试全栈解决方案与性能优化实践

Jmeter接口测试全栈解决方案与性能优化实践

1. Jmeter接口测试核心价值解析第一次接触Jmeter时,我被它简陋的UI界面误导,以为这不过是个简单的HTTP请求工具。直到亲眼见证它用单台笔记本压垮了公司价值百万的API网关,才意识到这个开源工具的真正威力。作为从业十年的测试老兵&#xff0…

📅 2026/11/6 6:58:36
EmEditor7新手入门:语法高亮与编码处理技巧

EmEditor7新手入门:语法高亮与编码处理技巧

简介:EmEditor7 是一款面向程序员、网页设计师及文本处理工作者的专业文本编辑器绿色版,主打语法高亮与高效编辑,可替代系统记事本应对大量文本与编程任务。压缩包共 92 个文件,约 4.1MB,以 47 个 dll 核心组件和 9 个…

📅 2026/11/6 6:58:36
MORE NEWS

更多资讯

📰

提升管理水平必看的员工管理书籍推荐

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

电商高并发必备:Redis 缓存穿透、击穿、雪崩防御方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

PNG 图片太大不好上传?一键转 JPG,体积直接变小

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

鸿蒙渲染范围控制优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Linux 网络编程面试题:TCP 字节流、部分读写与 UDP 数据报

TCP 字节流、部分读写、应用层消息边界与 UDP 丢包处理一、TCP 字节流与应用层消息边界1. TCP 为什么会出现粘包和拆包?答:TCP 是面向连接的可靠字节流协议,它只保证数据按照发送顺序可靠地交付给接收端,并不保留应用层的消息边界…

📰

pi0代码解析-examples-simple_client-2

这是一个无机器人的策略服务器压测/延迟基准工具。它连上一个已经跑起来的 WebSocket 策略服务器,按环境格式生成随机假观测反复请求推理,统计端到端延迟与各分段耗时,最后打印表格或存成 parquet。 serve_policy.py 启动的服务器 ◄──WebSocket── simple_client/mai…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬