Redis-Sorted-Set底層數(shù)據(jù)結(jié)構(gòu)

Sortedset底層存儲(chǔ)結(jié)構(gòu)

sortedset同時(shí)會(huì)由兩種數(shù)據(jù)結(jié)構(gòu)支持,ziplistskiplist.

只有同時(shí)滿足如下條件是,使用的是ziplist,其他時(shí)候則是使用skiplist

  • 有序集合保存的元素?cái)?shù)量小于128個(gè)
  • 有序集合保存的所有元素的長度小于64字節(jié)

當(dāng)ziplist作為存儲(chǔ)結(jié)構(gòu)時(shí)候,每個(gè)集合元素使用兩個(gè)緊挨在一起的壓縮列表結(jié)點(diǎn)來保存,第一個(gè)節(jié)點(diǎn)保存元素的成員,第二個(gè)元素保存元素的分值.

當(dāng)使用skiplist作為存儲(chǔ)結(jié)構(gòu)時(shí),使用skiplist按序保存元素分值,使用dict來保存元素和分值的對應(yīng)關(guān)系

參考資料

跳躍表(skiplist)

跳躍表是一種基于有序鏈表的擴(kuò)展,簡稱跳表.跳表會(huì)維護(hù)多個(gè)索引鏈表和原鏈表.

不斷得提升新的關(guān)鍵節(jié)點(diǎn)形成新的有序鏈表,通過空間換時(shí)間.

對有序鏈表進(jìn)行關(guān)鍵點(diǎn)的提升,作為插入對比的索引

提取關(guān)鍵點(diǎn)

插入邏輯

鏈表插入新的元素,只需對比新元素的值和關(guān)鍵點(diǎn)鏈表,這樣就能將對比次數(shù)縮減.

插入邏輯

關(guān)鍵節(jié)點(diǎn)提取邏輯

因?yàn)樵谔碇?使用空間換時(shí)間,會(huì)有多層的索引鏈表,每一層索引鏈表都是上一層的一半,當(dāng)數(shù)據(jù)量較大的時(shí)候,就能夠很輕松的降低鏈表查詢消耗的性能.

至于提取的極限,是同一層只有兩個(gè)節(jié)點(diǎn)

一個(gè)節(jié)點(diǎn)是沒有比較意義的

這樣的多層鏈表結(jié)構(gòu),就是所謂的跳躍表

提取新的索引節(jié)點(diǎn)

跳表采用拋硬幣的做法,在插入之后會(huì)隨機(jī)判斷新插入的元素是否稱為新的關(guān)鍵點(diǎn)

跳表插入節(jié)點(diǎn)的流程

  • 1.新節(jié)點(diǎn)和各層索引節(jié)點(diǎn)逐一比較,確定原鏈表的插入位置O(logN)
  • 2.把索引插入到原鏈表,O(1)
  • 3.利用拋硬幣的隨機(jī)方式,決定新界店是否提升為上一級(jí)索引.O(logN)

總體上跳表插入的時(shí)間復(fù)雜度是O(logN),空間復(fù)雜度是O(N)

節(jié)點(diǎn)刪除的流程

  • 1.在索引層找到響應(yīng)節(jié)點(diǎn)進(jìn)行刪除,刪除每一層的相同節(jié)點(diǎn)O(logN)
  • 3.如果某一層在刪除節(jié)點(diǎn)后只剩下一個(gè)節(jié)點(diǎn),那么這個(gè)鏈表就可以刪除了.O(logN)

跳表刪除的時(shí)間復(fù)雜度是O(logN)

SortedSet使用場景

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末囱稽,一起剝皮案震驚了整個(gè)濱河市根灯,隨后出現(xiàn)的幾起案子拙已,更是在濱河造成了極大的恐慌唉俗,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔑滓,死亡現(xiàn)場離奇詭異憨闰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)确封,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門除呵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來再菊,“玉大人,你說我怎么就攤上這事颜曾【腊危” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵泛豪,是天一觀的道長稠诲。 經(jīng)常有香客問我,道長诡曙,這世上最難降的妖魔是什么臀叙? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮价卤,結(jié)果婚禮上劝萤,老公的妹妹穿的比我還像新娘。我一直安慰自己慎璧,他們只是感情好稳其,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炸卑,像睡著了一般既鞠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盖文,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天嘱蛋,我揣著相機(jī)與錄音,去河邊找鬼五续。 笑死洒敏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疙驾。 我是一名探鬼主播凶伙,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼它碎!你這毒婦竟也來了函荣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扳肛,失蹤者是張志新(化名)和其女友劉穎傻挂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挖息,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡金拒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了套腹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绪抛。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡资铡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出幢码,到底是詐尸還是另有隱情笤休,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布蛤育,位于F島的核電站,受9級(jí)特大地震影響葫松,放射性物質(zhì)發(fā)生泄漏瓦糕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一腋么、第九天 我趴在偏房一處隱蔽的房頂上張望咕娄。 院中可真熱鬧,春花似錦珊擂、人聲如沸圣勒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽圣贸。三九已至,卻和暖如春扛稽,著一層夾襖步出監(jiān)牢的瞬間吁峻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工在张, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留用含,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓帮匾,卻偏偏與公主長得像啄骇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子瘟斜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

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