*Redis MODULE 命令
MODULE 是 Redis 模块管理的入口命令,支持加载、卸载、列出模块等操作。模块可以扩展 Redis 的数据类型和命令集。
*语法
MODULE subcommand [arg ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| subcommand | String | 是 | 子命令:HELP / LIST / LOAD / LOADEX / UNLOAD |
*返回值
- 返回值取决于具体子命令
- 子命令不存在时返回错误
*时间复杂度
- 取决于子命令:O(1) 到 O(N) 不等
*示例
*查看帮助
> MODULE HELP
1) MODULE LIST
2) MODULE LOAD <path> [arg ...]
3) MODULE LOADEX <path> [CONFIG <name> <value> ...] [ARGS <arg> ...]
4) MODULE UNLOAD <name>
*列出已加载模块
> MODULE LIST
1) 1) "name"
2) "ReJSON"
3) "ver"
4) (integer) 20000
5) "path"
6) "/usr/lib/redis/modules/rejson.so"
7) "args"
8) (empty array)
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR unknown subcommand | 子命令名称错误 | 使用 MODULE HELP 查看可用子命令 |
| ERR Error loading the extension | 模块路径错误或模块不兼容 | 检查模块路径、权限和 Redis 版本兼容性 |
*最佳实践
- 生产环境加载模块前先在测试环境验证兼容性
- 优先使用 MODULE LOADEX 替代旧版 MODULE LOAD,支持配置参数
- 卸载模块前确保无数据依赖该模块的数据类型
- 模块文件需要有可读权限,SELinux/AppArmor 可能限制加载
- 定期用 MODULE LIST 审计已加载的模块
*FAQ
Q1: 模块加载后能卸载吗? A: 可以,用 MODULE UNLOAD 模块名。但如果已有数据使用该模块的类型,可能无法卸载。
Q2: 模块会影响 Redis 稳定性吗? A: 模块以动态库形式加载,运行在 Redis 进程内, buggy 模块可能导致崩溃。只使用可信模块。
Q3: 模块和 Redis 版本有什么关系? A: 模块需使用与 Redis 版本兼容的 API 编译,升级 Redis 时可能需要重新编译模块。
Q4: 如何查看模块有哪些命令? A: 加载后使用 COMMAND LIST 或 COMMAND INFO 查看新增的命令。