Redis學習筆記(三) pipeline

2021-10-01 21:57:24 字數 1277 閱讀 3340

redis客戶端執行一條命令分4個過程:

傳送命令 -> 命令排隊 -> 命令執行 -> 返回結果
這個過程稱為round trip time(簡稱rtt, 往返時間),mgetmset有效節約了rtt,但大部分命令(如hgetall,並沒有mhgetall)不支援批量操作,需要消耗n次rtt,這個時候需要pipeline來解決這個問題

jedis jedis =

newjedis()

;long start = system.

currenttimemillis()

;pipeline pipelined = jedis.

pipelined()

;for

(int i =

0; i <

10000

; i++

)pipelined.

sync()

;long pause = system.

currenttimemillis()

;system.out.

println

((pause - start)

+"ms");

for(

int i =

0; i <

10000

; i++

)long end = system.

currenttimemillis()

;system.out.

println

((end - pause)

+"ms"

);

結果大概是

73ms

279ms

為什麼要pipeline?

避免多條命令傳送造成的效能浪費,尤其是客戶端與服務端的網路延遲越大,pipeline優勢越明顯。

pipeline是原子性的嗎?

不是,但mgetmset是。

與原生批命令的對比?

原生批命令是原子性,pipeline是非原子性

原生批命令一命令多個key, 但pipeline支援多命令(存在事務),非原子性

原生批命令是服務端實現,而pipeline需要服務端與客戶端共同完成

redis系列十:pipeline詳解

redis學習筆記三(set)

sadd keyname value 向set存入值 smembers keyname 查詢set的所有值 sismember keyname value 查詢指定的值是否存在 127.0.0.1 6379 sadd myset v1 integer 1 127.0.0.1 6379 sadd my...

redis學習筆記三 redis命令的執行過程

redis 是單執行緒應用,它是如何與多個客戶端簡歷網路鏈結並處理命令的?由於 redis 是基於 i o 多路復用技術,為了能夠處理多個客戶端的請求,redis 在本地為每乙個鏈結到 redis 伺服器的客戶端建立了乙個 redisclient 的資料結構,這個資料結構包含了每個客戶端各自的狀態和...

Docker學習筆記 三 安裝Redis

專案中使用到redis,平常都是別人搭建的,今天試著在google cloud platform 上搭建乙個學習環境。2.使用 docker images 檢視是否成功安裝,成功的話會顯示映象列表 3.使用 docker run name container name d image name 命令...