CommandOverrider

覆盖 Redis 命令。

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

  1. CommandOverrider 传递给 Java 代码中的 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-> {
    // 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"
为此页面评分
返回顶部 ↑