redis之pipeline使用
阿新 • • 發佈:2018-07-24
十倍 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(newSessionCallback<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使用