redis客戶端執行一條命令分4個過程:
傳送命令 -> 命令排隊 -> 命令執行 -> 返回結果
這個過程稱為round trip time
(簡稱rtt
, 往返時間),mget
mset
有效節約了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是原子性的嗎?
不是,但mget
、mset
是。
與原生批命令的對比?
原生批命令是原子性,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 命令...