通過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也不適合組裝特別多的命令,因此如果是成千上萬的這種命令,我們還是要進行命令的拆分。