Redis中Pipeline的使用
阿新 • • 發佈:2019-01-09
通過Java訪問Redis,我們一般使用Jedis,示例程式碼如下:
Jedis jedis = new Jedis("172.23.88.107", 6379); jedis.set("addr", "chonginq"); jedis.del("addr");
這段程式碼我們設定了addr的值,同時又刪除了鍵addr。如果Redis和我們的Java程式在同一臺伺服器,那麼可能不明顯,如果我們的Java程式和Redis屬於跨機房,那麼這個命令就會通過網路傳送兩次。如果很多這種短小的命令通過網路傳輸勢必就會造成網路延遲。於是就提出了pipeline的概念。
pipeline就是把一組命令進行打包,然後一次性通過網路傳送到Redis。同時將執行的結果批量的返回回來。示例程式碼如下:
public void testPipeline(){ Jedis jedis = new Jedis("172.23.88.107", 6379); try { Pipeline pipelined = jedis.pipelined(); pipelined.set("addr", "chongqing"); pipelined.del("addr"); //pipelined.sync();//沒有返回值 List<Object> list= pipelined.syncAndReturnAll();for (Object object : list) { System.out.println(object); } } finally { redis.dispose(jedis); } }
1.pipelined.sync()表示我一次性的非同步傳送到redis,不關注執行結果。
2.pipelined.syncAndReturnAll()程式會阻塞,等到所有命令執行完之後返回一個List集合。
3.pipeline也不適合組裝特別多的命令,因此如果是成千上萬的這種命令,我們還是要進行命令的拆分。