Redis Module 通过使用外部模块和自定义的 Redis 命令来扩展 Redis 的能力,在 Redis 4.0 版本引入。
Reids Module 是一种动态库,可以在启动时通过配置文件或者命令行参数获取路径进行加载,也可以在 Redis 运行后通过命令加载。它本身的设计目的就是在不同版本的 Redis 中运行,因此无需重新编译模块即可与特定版本 ( Redis > 4.0 )一起运行。
使用模块
下载动态库,并在配置文件中加入
loadmodule /path/to/mymodule.so
或者在命令行启动时,加入参数
MODULE LOAD /path/to/mymodule.so
即可在 Redis 中运行模块。 我们可以通过命令
module list
来查看加载的模块。如果想要卸载已经加载的模块,可以使用命令
module unload mymodule
但是如果一个模块实现了新的数据结构,那么它不能被这个命令卸载,只能通过重启 Redis 并修改配置文件的方式来卸载这个模块。
实现模块
想要实现一个 Redis Module 很简单,首先需要拷贝 redismodule.h,然后实现两个函数 _RedisCommand 和 _OnLoad 即可。前者用于命令的具体逻辑,后者用于挂载前者函数的指针到 Redis 的命令字典中。这样就可通过命令调用来进行相应的功能处理。实现 Redis Module 的语言并不一定要求是 C 语言,可以是 C++/Cython 等可以与 C 语言绑定的语言。
#include "redismodule.h"
#include <stdlib.h>
int HelloworldRand_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
RedisModule_ReplyWithLongLong(ctx