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

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

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

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

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

二摔敛、Redis有序集合(sorted set)

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

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

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

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

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

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

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

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

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

基數(shù)并不是存儲元素九火,存儲元素消耗內(nèi)存空間比較大赚窃,而是給某一個(gè)有重復(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)系作者
  • 序言:七十年代末划址,一起剝皮案震驚了整個(gè)濱河市扔嵌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夺颤,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胁勺,死亡現(xiàn)場離奇詭異世澜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)署穗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門寥裂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嵌洼,“玉大人,你說我怎么就攤上這事封恰÷檠” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵诺舔,是天一觀的道長鳖昌。 經(jīng)常有香客問我,道長低飒,這世上最難降的妖魔是什么许昨? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮褥赊,結(jié)果婚禮上糕档,老公的妹妹穿的比我還像新娘。我一直安慰自己拌喉,他們只是感情好速那,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尿背,像睡著了一般端仰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上残家,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天榆俺,我揣著相機(jī)與錄音,去河邊找鬼坞淮。 笑死茴晋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的回窘。 我是一名探鬼主播诺擅,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼啡直!你這毒婦竟也來了烁涌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤酒觅,失蹤者是張志新(化名)和其女友劉穎撮执,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舷丹,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抒钱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谋币。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仗扬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蕾额,到底是詐尸還是另有隱情早芭,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布诅蝶,位于F島的核電站退个,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏秤涩。R本人自食惡果不足惜帜乞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筐眷。 院中可真熱鬧黎烈,春花似錦、人聲如沸匀谣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽武翎。三九已至烈炭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宝恶,已是汗流浹背符隙。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垫毙,地道東北人霹疫。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像综芥,于是被迫代替她去往敵國和親丽蝎。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容