Redis數(shù)據(jù)結(jié)構(gòu)之--集合、有序集合和HyperLogLog

一、Redis集合數(shù)據(jù)結(jié)構(gòu)(set)

Redis 的集合不是一個線性結(jié)構(gòu),而是一個哈希表結(jié)構(gòu),它的內(nèi)部會根據(jù) hash 分子來存儲和查找數(shù)據(jù),理論上一個集合可以存儲 2 的 32 次方減 1 個節(jié)點(diǎn)(大約 42 億)個元素,因?yàn)椴捎霉1斫Y(jié)構(gòu),所以對于 Redis 集合的插入、刪除和查找的復(fù)雜度都是 0(1),只是我們需要注意 3 點(diǎn)。

  • 對于集合而言,它的每一個元素都是不能重復(fù)的,當(dāng)插入相同記錄的時(shí)候都會失敗
  • 集合是無序的。
  • 集合的每一個元素都是 String 數(shù)據(jù)結(jié)構(gòu)類型。

集合是無序的,并且支持并集、交集和差集的運(yùn)算

二、Redis有序集合(sorted set)

有序集合和集合類似,只是說它是有序的,和無序集合的主要區(qū)別在于每一個元素除了值之外,它還會多一個分?jǐn)?shù)。分?jǐn)?shù)是一個浮點(diǎn)數(shù),在 Java 中是使用雙精度表示的,根據(jù)分?jǐn)?shù),Redis 就可以支持對分?jǐn)?shù)從小到大或者從大到小的排序。

這里和無序集合一樣,對于每一個元素都是唯一的,但是對于不同元素而言,它的分?jǐn)?shù)可以一樣。元素也是 String 數(shù)據(jù)類型,也是一種基于 hash 的存儲結(jié)構(gòu)。

集合是通過哈希表實(shí)現(xiàn)的,所以添加、刪除、查找的復(fù)雜度都是 0(1)。集合中最大的成員數(shù)為 2 的 32 次方減 1(40 多億個成員),有序集合的數(shù)據(jù)結(jié)構(gòu)如圖 1 所示。

圖 1 有序集合的數(shù)據(jù)結(jié)構(gòu)

有序集合是依賴 key 標(biāo)示它是屬于哪個集合,依賴分?jǐn)?shù)進(jìn)行排序,所以值和分?jǐn)?shù)是必須的,而實(shí)際上不僅可以對分?jǐn)?shù)進(jìn)行排序,在滿足一定的條件下,也可以對值進(jìn)行排序。

三、Redis HyperLogLog(基數(shù))

基數(shù)是一種算法。舉個例子,一本英文著作由數(shù)百萬個單詞組成,你的內(nèi)存卻不足以存儲它們,那么我們先分析一下業(yè)務(wù)。

英文單詞本身是有限的,在這本書的幾百萬個單詞中有許許多多重復(fù)單詞,扣去重復(fù)的單詞,這本書中也就是幾千到一萬多個單詞而已,那么內(nèi)存就足夠存儲它們了。

比如數(shù)字集合 {1,2,5,7,9,1,5,9} 的基數(shù)集合為 {1,2,5,7,9} 那么基數(shù)(不重復(fù)元素)就是 5個,基數(shù)的作用是評估大約需要準(zhǔn)備多少個存儲單元去存儲數(shù)據(jù),但是基數(shù)的算法一般會存在一定的誤差(一般是可控的)。Redis 對基數(shù)數(shù)據(jù)結(jié)構(gòu)的支持是從版本 2.8.9 開始的。

基數(shù)并不是存儲元素,存儲元素消耗內(nèi)存空間比較大,而是給某一個有重復(fù)元素的數(shù)據(jù)集合(一般是很大的數(shù)據(jù)集合)評估需要的空間單元數(shù),所以它沒有辦法進(jìn)行存儲,加上在工作中用得不多,所以基數(shù)就介紹到這兒了。

四、總結(jié)

通過前面的文章我們已經(jīng)了解了Redis的一些基礎(chǔ)內(nèi)容和六種數(shù)據(jù)結(jié)構(gòu),日常工作中我們主要使用到的Redis高速的讀寫速度來優(yōu)化我們的應(yīng)用打開速度,利用到的數(shù)據(jù)結(jié)構(gòu)也是以字符串、哈希為主。后面的文章我們將會講到一些Redis的高級用法,譬如Redis哨兵、集群、持久化及一些緩存淘汰策略模式等等。愛學(xué)的你們要持續(xù)關(guān)注該Redis專題哦~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容