目錄
前言
Stream
geospatial
HyperLogLog
Bitmaps
Bitfields
前言
redis 中最關(guān)鍵的五個數(shù)據(jù)類型 String、List、Hash、Set、Zset 應(yīng)用最廣泛,同時 redis 也推出了額外的 5 個數(shù)據(jù)類型,他們分別是針對特殊場景才進行的應(yīng)用的.
Ps:這幾種類型的具體使用不用記,記你也記不住,因為不常用,因此我們只需要了解其對應(yīng)的應(yīng)用場景,需要的時候去官方文檔一查就清楚了~
Stream
Stream 就是一個阻塞隊列,是 redis 作為消息隊列的重要支撐,屬于是 List 的 blpop / brpop 的升級版本.
Stream 類型,按照官方文檔的意思,就是用來模擬實現(xiàn)事件傳播機制~??
事件是什么?例如以下兩個場景:
- epoll / io 多路復用:每次網(wǎng)卡 / socket 上有可讀可寫的數(shù)據(jù),都會通過這種事件回調(diào)的機制來通知到咱們的應(yīng)用程序代碼.
- JS:點擊事件、鍵盤事件、窗口大小改變 / 位置改變事件.
簡單來講,就是有些操作,我們也不知道什么時候出現(xiàn),只能等這個事件出現(xiàn)之后,再采取動作.
geospatial
?用來存儲坐標,就是經(jīng)緯度的.
存儲了一些點之后,就可以讓用戶給定一個坐標,去剛才存儲的點中查找(按照半徑,矩形區(qū)域...),這個功能在 “地圖” 應(yīng)用中非常重要~
HyperLogLog
應(yīng)用場景只有一個,就是用來估算集合中元素的個數(shù).
Set 有一個應(yīng)用場景就是統(tǒng)計 UV(多少個不同用戶進行了訪問) ,但問題在于一旦數(shù)據(jù)非常大,Set 就會消耗很多的內(nèi)存空間~
假設(shè) Set 存儲 userId,每個按照 8 字節(jié)計算,1億 UV = 8 億字節(jié),相當于 800 MB,而使用 HyperLogLog 最多會使用 12KB 的空間.
Ps:HyperLogLog 不存儲元素的內(nèi)容,但是能夠記錄 “元素的特征”(具體實現(xiàn),看源碼才知道,核心思路是“位操作”),從而在新增元素的時候,能夠知道新增元素,是一個存在的元素,還是一個新元素~
因此,HyperLogLog 只用來計數(shù)(記錄當前集合有多少個不同的元素 => 多少個不同用戶訪問了你這個服務(wù)器),但是不能告訴你這些元素是啥~
Bitmaps
?使用 bit 位來表示整數(shù),存儲的底層數(shù)據(jù)結(jié)構(gòu)式位圖~
位圖的本質(zhì)還是一個集合,屬于式 Set 類型針對整數(shù)優(yōu)化的特殊版本(節(jié)省空間)
對比 HyperLogLog:
HyperLogLog 既可以存儲數(shù)字也可以存儲字符串,但是不存儲元素內(nèi)容,只是計數(shù)效果,因此 hyperloglog 存儲元素,提取特征的過程是不可逆的(信息丟失),例如給你個豬肉,可以做成火腿腸,但是給你火腿腸是還原不回豬肉的。
Bitfields
bitfields 和 C 語言中的位域是很相似的~
bitfield 可以理解成一串二進制序列(字節(jié)數(shù)組),同時可以把這個字節(jié)數(shù)組中的幾個位,賦予特殊的含義,并可以進行 讀取/修改/算數(shù)運算 等操作.
位域相比較 String / hash 來說,目的是為了節(jié)省空間.
使用場景就是游戲中的殺怪計數(shù):
文章來源:http://www.zghlxwxcb.cn/news/detail-613211.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-613211.html
到了這里,關(guān)于深入學習 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 類型擴展的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!