Redis的學習之管道

2021-06-29 13:36:04 字數 808 閱讀 9497

redis的工作模式:請求響應式

redis是乙個使用客戶端/伺服器模型(也被稱作請求/響應協議)的tcp伺服器。

這說明通常來講乙個乙個請求的實現有以下步驟:

1.客戶端傳送請求到伺服器,並從socket中以

堵塞的方式

讀取伺服器的響應資料。

2.伺服器對發動的命令進行處理並把響應資料發回客戶端。

環路時間rtt:

從客戶端請求資料開始到收到伺服器的響應資料截止的時間。

管道解決的問題描述:

當客戶端需要一次傳送很多請求時(比如一次向乙個list新增很多元素,或者向乙個資料庫新增很多key),這個環路時間會對效能造成非常大的影響。如果環路時間是250毫秒(在網路連線非常慢的情況下),即使服務端能每秒處理10萬個請求,我們一秒最大也只能處理四個請求。

即使我們用的是本地回環介面,本地環路時間會短得多(比如在我本機上用ping測試是0.044毫秒),但是如果你要一次進行大量寫操作,這個時間依然不少。

redis的管道:

乙個請求/響應伺服器能夠做到在客戶端還沒有讀取上個返回值的時候就處理新的請求。通過這種方式客戶端就可以在不獲取每次請求的響應的情況下給服務端一次傳送

多個命令

,並在未來的某個時間一次獲得這些所有的響應。這樣

我們不再每次呼叫都產生rtt的花銷,所有命令加起來只產生一次rtt花銷。

使用管道要注意:

當客戶端一下子傳送多條請求命令時,伺服器會將這些所有命令的請求放入佇列,這樣會帶來額外的記憶體開銷。為了減少記憶體開銷,我們最好規定乙個命令數的上限,比如10000條,這樣記憶體開銷的上限就是這10000條命令的響應值。

Redis筆記六之管道

redis中乙個操作命令就是客戶端和服務端的一次互動,如果有1000條set命令則意味著客戶端和服務端會有1000次互動,這顯然在效能上不符合我們的期望。redis提供管道機制來解決這一問題,使用管道會將1000條命令一次性發給伺服器然後再一次性全部執行,管道就是執行了乙個批處理操作。下面兩個例子分...

redis優化之PipeLine管道

首先我們使用普通的redistemplate進行操作 配置完之後,思考下為啥pipeline可以優化redis的效能?什麼時候使用?redis是單執行緒的,io多路復用,它需要在前乙個請求處理完成之後,再處理下乙個請求。如果說有很多請求忽然傳送過來,那麼也會影響redis的效能,pipeline可以...

Redis學習筆記之(十一)管道與節省空間

管道 客戶端和 redis 使用tcp 協議連線。不論是客戶端向 redis 傳送命令還是 redis 向客戶端返回命令執行的結果,都需要經過網路傳輸,這兩部分的總耗時稱為往返時延。在執行多條命令時。每條命令都需要等待上一條命令執行完畢 即收到 redis 的返回結果 才能執行,即使命令不需要上一條...