redis管道使用

4nkexdtk  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(467)

我想了解管道是如何工作的,我想尝试一些不同的东西。我注意到如果密钥没有过期密钥,就没有设置过期密钥的方法,所以我用绝地武士做了一个例子。
例子

Map<String, Response> responses = new HashMap<>();

long start = System.currentTimeMillis();
try (Jedis resource = redisManager.getResource()) {

    Pipeline pipeline = resource.pipelined();

    responses.put("time", pipeline.ttl(args[1]));

    pipeline.sync();

    pipeline.multi();

    if (responses.get("time").get().equals(-1L)) {
        pipeline.expire(args[1], 15);
    }

    pipeline.exec();

}

我想知道我应该那样用还是你有什么想法?我找不到任何解决办法。

bwntbbo3

bwntbbo31#

如果在将每个命令发送到管道之后同步并获得结果,那么与不使用管道发送命令没有太大区别。流水线的好处来自于在不等待响应的情况下发送大量命令,然后一次读取所有响应(这样就省去了等待响应的大量时间)。更多信息:https://redis.io/topics/pipelining).
因此,上面的实现更像是“pipeline-y”(请原谅任何关于确切管道方法名称的错误,我主要使用spring数据而不是直接的jedi):

List<String> keysToCheckForTtl = ...
Map<String, Response> responses = new HashMap<>();

for (String key : keysToCheckForTtl) {
  responses.put(key, pipeline.ttl(key));
}

pipeline.sync(); // get the responses back for all TTL commands

for (String key : keysToCheckForTtl) {
  if (responses.get(key).get().equals(-1L)) {
        pipeline.expire(key, 15);
  }
}

pipeline.exec(); // finalize all expire commands

如您所见,这与要检查和过期的密钥列表一起工作。如果只需要检查一个密钥,然后使其过期,则不需要管道。

相关问题