CommandOverrider
覆盖 Redis 命令。
CommandOverrider
允许您覆盖和自定义 Redis 命令。
- 将
CommandOverrider
传递给 Java 代码中的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-> {
// Get the operation arguments
ArrayList<String> operationArguments = new ArrayList<String>();
for (int i = 1; i < r.length; i++) {
operationArguments.add(new String((byte[]) r[i], StandardCharsets.UTF_8));
}
// Add a last-modified field and a corresponding timestamp to the operation arguments
operationArguments.add("last-modified");
operationArguments.add(Long.toString(System.currentTimeMillis()));
// Run the enriched HSET operation
Object reply = GearsBuilder.callNext(operationArguments.toArray(new String[0]));
return reply.toString();
}).register(ExecutionMode.SYNC);
在使用 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"