1. 程式人生 > >redis之pipeline使用

redis之pipeline使用

十倍 align 連續 aac 業務 rri redis管道 ret exception

redis之pipeline

  我們要完成一個業務,可能會對redis做連續的多個操作,這有很多個步驟是需要依次連續執行的。這樣的場景,網絡傳輸的耗時將是限制redis處理量的主要瓶頸。

  那麽此時就可以引入pipeline了,pipeline管道就是解決執行大量命令時、會產生大量同學次數而導致延遲的技術。

  其實原理很簡單,pipeline就是把所有的命令一次發過去,避免頻繁的發送、接收帶來的網絡開銷,redis在打包接收到一堆命令後,依次執行,然後把結果再打包返回給客戶端。

  

 1 public String tsetRedis(){
 2         Long time = System.currentTimeMillis();
3 for (int i = 0; i < 10000; i++) { 4 stringRedisTemplate.opsForValue().set("yi" + i, "wo" + i); 5 } 6 Long time1 = System.currentTimeMillis(); 7 System.out.println("耗時:" + (time1 - time)); 8 long time4 = System.currentTimeMillis(); 9 stringRedisTemplate.executePipelined(new
SessionCallback<Object>() { 10 @Override 11 public <K, V> Object execute(RedisOperations<K, V> redisOperations) throws DataAccessException { 12 for (int i = 0; i < 10000; i++) { 13 stringRedisTemplate.opsForValue().set("qiang" + i, "wo" + i);
14 } 15 return null; //RedisTemplate執行executePipelined方法是有返回值的 16 } 17 }); 18 Long time2 = System.currentTimeMillis(); 19 System.out.println("耗時:" + (time2 - time4)); 20 return "redis正常耗時:" + (time1 - time) + "<br/>" + "redis管道耗時:" + (time2 - time4); 21 }

  結果:

redis正常耗時:423ms
redis管道耗時:40ms

可見,采用管道速度比一般的快十倍。

redis之pipeline使用