在這個商業世界中,如果你佔領了概念高地就意味着有種先天的優勢。就好比你給自己起了一個名字叫Java。
最近幾年圈裏流行“stream”這個詞,只要沾上這個詞,就感覺不一樣了。流動起來如絲般爽滑。
java api 加入了stream。讓靜止的水強行流動。
Flink號稱自己是在一條Data Stream的河流上做計算。
Kafka直接說自己是分佈式流平臺。
Ignite說自己也適合做stream:
Spark直接有個模塊:Spark Stream:
看了下,只有ActiveMQ還在說自己只是一個message queue。可能因爲名字上帶了MQ了吧:
於是,Redis也耐不住寂寞了,覺得stream這個詞應該引入。看了上面的各種stream,你大概知道Redis是幹什麼的了吧,沒錯,就和kafka做的事情很像。
此時,我其實可以結束了。
但作爲一篇成熟的文章還是要多寫一點。湊不夠三百字不讓標原創。
一個新的數據類型
用Redis官方的說法,stream是redis衆多數據類型的其中一個,這是一個新的數據類型。把stream歸爲數據類型的一種,這有利於Redis概念上的一脈相承。
秩序要井然,否則顯得亂糟糟。這一點也在redis官方介紹中可見端倪,其實連他們自己都不好意思把stream作爲一個數據類型:
所以,此時stream充其量作爲一個抽象的數據類型,劃歸爲抽象,這樣既和之前的概念對齊,也確保了描述的精確。
一個append only數據結構
官方說他們這個stream是對日誌數據結構(log data structure)的高度抽象。stream首先是一個append only日誌數據結構,但實現更加的複雜,要比一般的日誌文件更強大。
一個既可以檢索又可以消費MQ
你是不是嗅出了一絲Kafka的氣息。kafka消費的時候就是在移動offset,數據依然在。你可以用同樣的邏輯來想Redis的stream。既然數據一直在是不是就可以檢索了,是的。
消費支持單一和consumer group
是不是又有kafka的既視感,沒錯,redis stream的單一消費和consumer group消費的概念都和kafka是一樣的。consumer group可以協調一組消費者來消費。
命令全都以X開頭
XADD、XRANGE 、XREVRANGE、XLEN、XREAD
添加
XADD
查詢
XRANGE、XREVRANGE
長度
XLEN
監聽
XREAD
組監聽
XGROUP、XREADGROUP、XACK
更多具體的命令手冊請移步https://redis.io/topics/streams-intro,或直接點擊“閱讀原文”。或者移步阿飛兄的公號鏈接《Streams:深入剖析Redis5.0全新數據結構》https://mp.weixin.qq.com/s/GpG3t_O_SxLGNklVnoOiYQ
一個天生驕傲的MQ
我不小心在redislab上找到了兩張圖,拿來供大家賞玩:
看起來簡直要比傳統的MQ吊炸天,不過人們發表瞭如下觀點:
希望Redis Streams真的如表格中那麼叼,這樣我們也就放心了。