簡(jiǎn)單動(dòng)態(tài)字符串(simple dynamic string SDS)
String的數(shù)據(jù)類型是由SDS實(shí)現(xiàn)的。Redis并沒(méi)有采用C語(yǔ)言的字符串表示友浸,而是自己構(gòu)建了一種名為SDS的抽象類型峰尝,并將SDS作為Redis的默認(rèn)字符串表示。
鏈表
鏈表是list的實(shí)現(xiàn)方式之一收恢。當(dāng)list包含了數(shù)量較多的元素武学,或者列表中包含的元素都是比較長(zhǎng)的字符串時(shí),Redis會(huì)使用鏈表作為實(shí)現(xiàn)List的底層實(shí)現(xiàn)伦意。此鏈表是雙向鏈表
字典
?字典火窒,又稱為符號(hào)表(symbol table)、關(guān)聯(lián)數(shù)組(associative array)或映射(map)驮肉,是一種用于保存鍵值對(duì)的抽象數(shù)據(jù)結(jié)構(gòu)
跳躍表
Redis 只在兩個(gè)地方用到了跳躍表熏矿,一個(gè)是實(shí)現(xiàn)有序集合鍵(sorted Sets),另外一個(gè)是在集群節(jié)點(diǎn)中用作內(nèi)部數(shù)據(jù)結(jié)構(gòu)离钝。
其實(shí)跳表主要是來(lái)替代平衡二叉樹(shù)的曲掰,比起平衡樹(shù)來(lái)說(shuō),跳表的實(shí)現(xiàn)要簡(jiǎn)單直觀的多奈辰。
跳躍表(skiplist)是一種有序數(shù)據(jù)結(jié)構(gòu),它通過(guò)在每個(gè)節(jié)點(diǎn)中維持多個(gè)指向其他節(jié)點(diǎn)的指針乱豆,從而達(dá)到快速查找訪問(wèn)節(jié)點(diǎn)的目的奖恰。跳躍表是一種隨機(jī)化的數(shù)據(jù),跳躍表以有序的方式在層次化的鏈表中保存元素,效率和平衡樹(shù)媲美 ——查找宛裕、刪除瑟啃、添加等操作都可以在O(logn)期望時(shí)間下完成。
整數(shù)集合(Intset)
《Redis 設(shè)計(jì)與實(shí)現(xiàn)》?中這樣定義整數(shù)集合:“整數(shù)集合是集合建(sets)的底層實(shí)現(xiàn)之一揩尸,當(dāng)一個(gè)集合中只包含整數(shù)蛹屿,且這個(gè)集合中的元素?cái)?shù)量不多時(shí),redis就會(huì)使用整數(shù)集合intset作為集合的底層實(shí)現(xiàn)岩榆〈砀海”
我們可以這樣理解整數(shù)集合坟瓢,他其實(shí)就是一個(gè)特殊的集合,里面存儲(chǔ)的數(shù)據(jù)只能夠是整數(shù)犹撒,并且數(shù)據(jù)量不能過(guò)大折联。
壓縮列表
壓縮列表是列表鍵(list)和哈希鍵(hash)的底層實(shí)現(xiàn)之一。當(dāng)一個(gè)列表鍵只有少量列表項(xiàng)识颊,并且每個(gè)列表項(xiàng)要么就是小整數(shù)诚镰,要么就是長(zhǎng)度比較短的字符串,那么Redis 就會(huì)使用壓縮列表來(lái)做列表鍵的底層實(shí)現(xiàn)祥款。