CommandOverrider
覆盖 Redis 命令。
CommandOverrider
允许您覆盖和自定义 Redis 命令。
- 在您的 Java 代码中将
CommandOverrider
传递给GearsBuilder.CreateGearsBuilder()
函数。 - 调用
register()
函数。 - 运行
RG.JEXECUTE
注册您的代码。
注意
如果您注册了使用 CommandOverrider
的代码,当您运行 RG.DUMPREGISTRATIONS
命令时,它的 reader
值为 "CommandReader"
,而不是 "CommandOverrider"
。参数
名称 | 类型 | 描述 |
---|---|---|
command | string | 要覆盖的命令 |
prefix | string | 仅对以该字符串开头的键覆盖命令 |
输出记录
输出包含命令名称和参数的记录。
示例
以下示例展示了如何覆盖 HSET
命令,以便它还为 "user:" 哈希添加 last_modified
时间戳。
添加一些用户数据作为哈希
redis> HSET user:1 name "morgan" posts 201
(integer) 2
示例代码
// Create the reader that will pass data to the pipe
CommandOverrider overrider = new CommandOverrider();
// Override the HSET command
overrider.setCommand("HSET");
// Only override HSET for keys that start with "user:"
overrider.setPrefix("user:");
// Create the data pipe builder
GearsBuilder.CreateGearsBuilder(overrider).map(r-> {
// Extract the key from the command arguments
String keyName = new String((byte[]) r[1], StandardCharsets.UTF_8);
// Add a last_modified timestamp to the user's profile
GearsBuilder.execute("HSET", keyName, "last_modified", Long.toString(System.currentTimeMillis()));
// Get the original HSET arguments
ArrayList<String> commandArray = new ArrayList<String>();
for (int i=1; i < r.length; i++) {
commandArray.add(new String((byte[]) r[i], StandardCharsets.UTF_8));
}
// Run the original HSET command
GearsBuilder.callNext(commandArray.toArray(new String[0]));
return "OK";
}).register();
在您使用 RG.JEXECUTE
命令注册了之前的代码后,尝试使用 HSET
更新用户数据以进行测试
redis> HSET user:1 posts 234
"OK"
现在,用户的个人资料应该具有 posts
的更新值和 last_modified
时间戳
redis> HGETALL user:1
1) "name"
2) "morgan"
3) "posts"
4) "234"
5) "last_modified"
6) "1643237927663"