CommandOverrider

覆盖 Redis 命令。

CommandOverrider 允许您覆盖和自定义 Redis 命令。

  1. 在您的 Java 代码中将 CommandOverrider 传递给 GearsBuilder.CreateGearsBuilder() 函数。
  2. 调用 register() 函数。
  3. 运行 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"
RATE THIS PAGE
Back to top ↑