瑞士軍刀redis-pipeline

歷精圖治發表於2018-11-09

pipeline :

  • 什麼流水線
  • 與原生操作對比
  • 客戶端實現
  • 使用建議

一次網路命令通訊模型

一次時間= 一次網路時間+ 一次命令時間

批量網路命令通訊模型

n次時間= n次網路時間+n次命令時間

流水線pipeline

1次pipeline(n條命令)= 1次網路時間+n次命令時間

命令 N個命令操作 一次pipiline(n個命令)
時間 n次網路+n次命令 1次網路+n次命令
資料量 1次命令 n條命令
  • redis的命令時間時微妙級別
  • pipeline每次條數要控制(網路 )

流水線的作用:

光速=3*10的8次方/秒= 30000公里/秒 
距離= 1300公里
光線傳輸速度~光速的2/3 
一次傳輸命令= 1300*2/(300000*2/3)= 13 毫秒  

Pipeline Jedis實現

虛擬碼
Jedis jedis = new Jedis("127.0.0.1",6379);
for(int i = 0;i<100;i++){
 Pipeline pipeling = jedis.pipilined();
     for(int j = i*100;j<(i+1)*100;j++){
            pipeline.hset("hashkey:"+j+"value"+j );
     }
     pipeline.syncAndReturnAll();
}

使用建議

1:注意每次pipeline攜帶資料量
2:pipline 每次只能作用在redis節點上
3:M操作與pipeline區別

相關文章