*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 查看新增的命令。