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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM