Redis5.0大招來了,重磅功能 Stream 介紹

趕著熱浪,Redis5.0大招來了,增加了很多新的特色功能;其中最重磅就是多出了一個數據結構Stream。其實在Redis 4.0 時就有預兆了;只不過是作者覺得其是太牛掰的新功能,必須在大版本中放出來,也是很認真的借鑑了kafka stream 設計。

Redis5.0大招來了,重磅功能 Stream 介紹

Redis Stream介紹:

1.該Stream的本質是一個消息隊列,其結構實現是一個消息鏈表,將所有加入的消息都串起來,每個消息都有一個唯一的ID和對應的內容。

2.該Stream會永久的存放數據,並且客戶端會保留上一次拿的id,甚至通過修改id可以拿回以前的數據,和消息隊列服務持久化消息回放一樣;

3.該Stream提供了消費者組,不同組接收到的數據完全一樣,但是組內的消費者則是競爭關係;一個應用理解為一個消費者組,應用後端的多個實例共同消費一份數據。

4.可以設置為阻塞與非阻塞模式;

5.多客戶端時,遵循FIFO特性。

官網:

https://redis.io

幫助理解:

每個Stream都有唯一的名稱,首次使用xadd指令追加消息時自動創建。

每個Stream都可以掛多個消費組,每個消費組會通過遊標last_delivered_id記錄該組在Stream數組上消費的位置;每個消費組(Consumer Group)的狀態都是獨立的,相互不受影響。

消費者(Consumer)內部會有個積壓狀態變量pending_ids,記錄了當前已經被客戶端讀取的消息,但是還沒有ack,隨著客戶端ack的返回,積壓值會變小。

看到這裡相信已經入門,和kafka stream有麼有很像,更多stream自行理解即可,也歡迎留言討論。

幾個命令簡單介紹:

xadd 追加消息

xdel 刪除消息,這裡的刪除僅僅是設置了標誌位,不影響消息總長度

xrange 獲取消息列表,會自動過濾已經刪除的消息

xlen 消息長度

del 刪除Stream

xgroup create 創建消費組

xinfo streamname 獲取信息

xread 消息讀取,類似使用list方式

小結:其實redis的stream算不上新的東西,接觸消息隊列服務和kafka stream 的同學很容易理解,並且在某些場景可以使用redis的stream代替kafka等消息隊列,減少系統複雜性,不用混合使用,增強系統的穩定性,架構更簡潔易維護。

更多內容請關注每日編程,每天進步一點。


分享到:


相關文章: