Redis01——Redis究竟支持哪些數(shù)據(jù)結(jié)構(gòu)

Redis已經(jīng)越來(lái)越多地應(yīng)用到互聯(lián)網(wǎng)技術(shù)中,而關(guān)于Redis的相關(guān)問(wèn)題,也成為面試中必不可少的一部分,本文開始將會(huì)逐漸把我了解到的關(guān)于Redis的一些面試問(wèn)題整理出來(lái),供各位參考,如有不對(duì)之處,煩請(qǐng)指正。

簡(jiǎn)介

Redis共支持五種數(shù)據(jù)結(jié)構(gòu),分別是string(字符串)、hash(字典)、list(列表)、set(集合)、zset(有序集合)。

詳解

string(字符串)

數(shù)據(jù)結(jié)構(gòu):Redis中string數(shù)據(jù)結(jié)構(gòu)為動(dòng)態(tài)字符數(shù)組,采用預(yù)分配冗余空間的方式來(lái)減少內(nèi)存分配。

擴(kuò)容機(jī)制:當(dāng)字符串長(zhǎng)度小于1MB時(shí),擴(kuò)容都是加倍現(xiàn)有空間。當(dāng)字符串長(zhǎng)度大于1MB時(shí),每次擴(kuò)容1MB,最大長(zhǎng)度為512MB。

計(jì)數(shù):當(dāng)值為整數(shù)時(shí),可以進(jìn)行自增操作。范圍為signed long 的最大值和最小值之間。

hash(字典)

數(shù)據(jù)結(jié)構(gòu):Redis中l(wèi)ist相當(dāng)于Java的HashMap。

漸進(jìn)式rehash:在Redis中針對(duì)hash沖突采用的是漸進(jìn)式rehash操作。漸進(jìn)式rehash會(huì)同時(shí)保留新舊兩個(gè)hash結(jié)構(gòu),查詢時(shí)同時(shí)查詢兩個(gè)hash結(jié)構(gòu)。在后續(xù)的定時(shí)任務(wù)及hash操作的過(guò)程中完成從舊hash結(jié)構(gòu),遷移到新hash結(jié)構(gòu)的過(guò)程。

list(列表)

數(shù)據(jù)結(jié)構(gòu):Redis中l(wèi)ist相當(dāng)于Java的LinkedList,所以寫操作時(shí)間復(fù)雜度為O(1),讀操作時(shí)間復(fù)雜度為O(n)。

set(集合)

數(shù)據(jù)結(jié)構(gòu):Redis中set相當(dāng)于Java的HashSet。

zset(有序集合)

數(shù)據(jù)結(jié)構(gòu):Redis中zset類似于一個(gè)帶權(quán)值(score)的SortedSet。其內(nèi)部通過(guò)跳躍列表(關(guān)于跳躍列表,將會(huì)在后期的文章中進(jìn)行分享)實(shí)現(xiàn)。

總結(jié)

1.通用規(guī)則

hash、list、set、zset這四種數(shù)據(jù)結(jié)構(gòu)為容器型數(shù)據(jù)結(jié)構(gòu),所有容器型數(shù)據(jù)結(jié)構(gòu)遵守以下規(guī)則:

  1. create if not exists:當(dāng)容器不存在時(shí),需先創(chuàng)建一個(gè)容器,再進(jìn)行操作;

  2. drop if not elements:當(dāng)容器內(nèi)無(wú)元素時(shí),會(huì)立即刪除容器,釋放內(nèi)存。

2.過(guò)期時(shí)間

過(guò)期時(shí)間以對(duì)象為單位,如整個(gè)hash結(jié)構(gòu)。

當(dāng)string被set方法修改后,過(guò)期時(shí)間將會(huì)失效。

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

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

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