趕著熱浪,Redis5.0大招來了,增加了很多新的特色功能;其中最重磅就是多出了一個數據結構Stream。其實在Redis 4.0 時就有預兆了;只不過是作者覺得其是太牛掰的新功能,必須在大版本中放出來,也是很認真的借鑑了kafka 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等消息隊列,減少系統複雜性,不用混合使用,增強系統的穩定性,架構更簡潔易維護。
更多內容請關注每日編程,每天進步一點。
閱讀更多 每日編程 的文章