为了账号安全,请及时绑定邮箱和手机立即绑定

jedis pipline exec 一次默认执行多少条命令?

jedis pipline exec 一次默认执行多少条命令?

皈依舞 2022-06-23 10:26:22
我正在使用 jedis 管道将一批数据插入到 redis 中。现在我面临一个困惑的问题。我想批量处理一个特定的大小,然后调用sync(),但似乎管道大约每200条记录会自动调用一次同步。这是我的代码,谁能告诉我是否存在任何配置?public class RedisClusterTest {public static void main(String args[]) throws IOException, InterruptedException {    String host = args[0];    int port = Integer.valueOf(args[1]);    int cnt = Integer.valueOf(args[2]);    Jedis jedis = new Jedis(host, port);    Pipeline pip = jedis.pipelined();    for(int i = 0 ; i < 2000; i++) {        pip.hset("Server", String.valueOf(i), String.valueOf(i));        Thread.sleep(10);    }    // When it end loop, about 1900 records has already been insert into redis, and the last sync only made last remaining data been sync.    pip.sync()
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

Pipeline 不会等待您的确认将批处理发送到 Redis。文档说:


有时你需要发送一堆不同的命令。一个非常酷的方法是使用流水线,并且比天真的方法具有更好的性能。这样,您无需等待响应即可发送命令,并且您实际上在最后读取了响应,这样更快。


总而言之,它说使用管道而不等待响应,并且像流一样发送。


我查看了他们的源代码,确认了他们的文档。


public Pipeline pipelined() {

  pipeline = new Pipeline();

  pipeline.setClient(client);

  return pipeline;

}

这将返回您的 Pipeline 实例。然后你打电话给一堆 HSET


public Long hset(final byte[] key, final byte[] field, final byte[] value) {

  checkIsInMultiOrPipeline();

  client.hset(key, field, value);

  return client.getIntegerReply();

}

马上得到答复。


然后你调用同步它:


通过读取所有响应来同步管道。此操作关闭管道。为了从流水线命令中获取返回值,请捕获您执行的命令的不同 Response<?>。


换句话说,它处理您的管道实例。


总而言之,如果您希望它仅在调用同步时发送批处理,则不应使用“流水线”。这不是它的工作方式。


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号