Redis中的批量操作Pipeline

2021-09-24 22:31:19 字數 1622 閱讀 6622

大多數情況下,我們都會通過請求-相應機制去操作redis。只用這種模式的一般的步驟是,先獲得jedis例項,然後通過jedis的get/put方法與redis互動。由於redis是單執行緒的,下一次請求必須等待上一次請求執行完成後才能繼續執行。然而使用pipeline模式,客戶端可以一次性的傳送多個命令,無需等待服務端返回。這樣就大大的減少了網路往返時間,提高了系統效能。

下面用乙個例子測試這兩種模式在效率上的差別:

publicclasspiplinetest

publicstaticvoidusepipeline()

pipeline.sync();

jedis.close();

system.out.println("usepipeline total time:"+ (system.currenttimemillis() - begin));

}

publicstaticvoidusenormal()

jedis.close();

system.out.println("usenormal total time:"+ (system.currenttimemillis() - begin));

}

publicstaticshardedjedis getshardedjedis()

}

輸出結果:

usenormal total time:772

usepipeline total time:112

從測試的結果可以看出,使用pipeline的效率要遠高於普通的訪問方式。

那麼問題來了,在什麼樣的情景下適合使用pipeline呢?

有些系統可能對可靠性要求很高,每次操作都需要立馬知道這次操作是否成功,是否資料已經寫進redis了,那這種場景就不適合。

還有的系統,可能是批量的將資料寫入redis,允許一定比例的寫入失敗,那麼這種場景就可以使用了,比如10000條一下進入redis,可能失敗了2條無所謂,後期有補償機制就行了,比如簡訊**這種場景,如果一下**10000條,按照第一種模式去實現,那這個請求過來,要很久才能給客戶端響應,這個延遲就太長了,如果客戶端請求設定了超時時間5秒,那肯定就丟擲異常了,而且本身**簡訊要求實時性也沒那麼高,這時候用pipeline最好了。

Redis中的批量操作Pipeline

大多數情況下,我們都會通過請求 相應機制去操作redis。只用這種模式的一般的步驟是,先獲得jedis例項,然後通過jedis的get put方法與redis互動。由於redis是單執行緒的,下一次請求必須等待上一次請求執行完成後才能繼續執行。然而使用pipeline模式,客戶端可以一次性的傳送多個...

Redis中的批量操作Pipeline

使用正常和pipeline的簡單對比 public class piplinetest public static void usepipeline pipeline.sync jedis.close system.out.println usepipeline total time system....

Redis中的批量操作Pipeline

大多數情況下,我們都會通過請求 相應機制去操作redis。只用這種模式的一般的步驟是,先獲得jedis例項,然後通過jedis的get put方法與redis互動。由於redis是單執行緒的,下一次請求必須等待上一次請求執行完成後才能繼續執行。然而使用pipeline模式,客戶端可以一次性的傳送多個...