Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Redis管道使用_Java_Redis_Pipeline_Jedis_Ttl - Fatal编程技术网

Java Redis管道使用

Java Redis管道使用,java,redis,pipeline,jedis,ttl,Java,Redis,Pipeline,Jedis,Ttl,我试图了解管道是如何工作的,我想尝试一些不同的东西。我注意到,如果密钥没有过期密钥,就没有设置过期密钥的方法,所以我用绝地武士做了一个例子 示例 Map<String, Response> responses = new HashMap<>(); long start = System.currentTimeMillis(); try (Jedis resource = redisManager.getResource()) { Pipeline pipeli

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

示例

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();

}
Map responses=newhashmap();
长启动=System.currentTimeMillis();
试试看(Jedis resource=redisManager.getResource()){
Pipeline Pipeline=resource.pipelined();
responses.put(“time”,pipeline.ttl(args[1]);
sync();
pipeline.multi();
if(responses.get(“time”).get()等于(-1L)){
管道失效(args[1],15);
}
pipeline.exec();
}

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

如果在将每个命令发送到管道后进行同步并获得结果,那么不使用管道发送命令没有多大区别。流水线的好处在于,在不等待响应的情况下发送大量命令,然后一次全部读取响应(这样就省去了等待响应的大量时间。更多信息:)

因此,您上面所说的更为“管道-y”的实现是这样的(请原谅管道方法名称中的任何错误,我主要使用Spring数据,而不是直接的Jedis):

List keysToCheckForTtl=。。。
Map responses=newhashmap();
for(字符串键:keystecheckforttl){
responses.put(key,pipeline.ttl(key));
}
pipeline.sync();//获取所有TTL命令的响应
for(字符串键:keystecheckforttl){
if(responses.get(key.get().equals(-1L)){
管道失效(图例15);
}
}
pipeline.exec();//完成所有过期命令

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

如果在将每个命令发送到管道后进行同步并获得结果,则在不使用管道的情况下发送命令没有多大区别。流水线的好处在于,在不等待响应的情况下发送大量命令,然后一次全部读取响应(这样就省去了等待响应的大量时间。更多信息:)

因此,您上面所说的更为“管道-y”的实现是这样的(请原谅管道方法名称中的任何错误,我主要使用Spring数据,而不是直接的Jedis):

List keysToCheckForTtl=。。。
Map responses=newhashmap();
for(字符串键:keystecheckforttl){
responses.put(key,pipeline.ttl(key));
}
pipeline.sync();//获取所有TTL命令的响应
for(字符串键:keystecheckforttl){
if(responses.get(key.get().equals(-1L)){
管道失效(图例15);
}
}
pipeline.exec();//完成所有过期命令

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

我将检查许多密钥,然后将TTL添加到多密钥。我应该像上面的例子那样使用吗?我认为类似的东西(做所有的TTL,得到响应,做所有的过期)对你来说会有用。它允许您通过尽可能多地批处理命令来利用管道的特性。因为在你过期之前你需要回复,我认为不可能通过移除中间的一个同步来改善这一点。我希望redis很快会添加这个功能。我会检查很多键,然后将TTL添加到多键。我应该像上面的例子那样使用吗?我认为类似的东西(做所有的TTL,得到响应,做所有的过期)对你来说会有用。它允许您通过尽可能多地批处理命令来利用管道的特性。因为在你过期之前你需要回复,我认为不可能通过移除中间的一个同步来改善这一点。我希望redis很快会添加此功能。
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