亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號