1. 程式人生 > >Redis中Pipeline的使用

Redis中Pipeline的使用

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