首頁技術(shù)文章正文

Redis中l(wèi)ist底層的實(shí)現(xiàn)方式與區(qū)別【pytho面試題】

更新時(shí)間:2021-04-02 來源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif


(1)問題分析

考官主要想考察應(yīng)聘者對Redis數(shù)據(jù)的理解和拓展,有沒有深入的去理解過數(shù)據(jù)庫。
(2)核心問題講解
列表對象的編碼可以是ziplist或者linkedlist。
ziplist是一種壓縮鏈表,它的好處是更能節(jié)省內(nèi)存空間,因?yàn)樗鎯Φ膬?nèi)容都是在連續(xù)的內(nèi)存區(qū)域當(dāng)中的。當(dāng)列表對象元素不大,每個(gè)元素也不大的時(shí)候,就采用ziplist存儲。但當(dāng)數(shù)據(jù)量過大時(shí)就ziplist就不是那么好用了。因?yàn)闉榱吮WC他存儲內(nèi)容在內(nèi)存中的連續(xù)性,插入的復(fù)雜度是O(N),即每次插入都會重新進(jìn)行realloc。對象結(jié)構(gòu)中ptr所指向的就是一個(gè)ziplist。整個(gè)ziplist只需要malloc一次,它們在內(nèi)存中是一塊連續(xù)的區(qū)域。
linkedlist是一種雙向鏈表。它的結(jié)構(gòu)比較簡單,節(jié)點(diǎn)中存放pre和next兩個(gè)指針,還有節(jié)點(diǎn)相關(guān)的信息。當(dāng)每增加一個(gè)node的時(shí)候,就需要重新malloc一塊內(nèi)存。
(3)問題擴(kuò)展
獲取當(dāng)前同時(shí)還會問Redis數(shù)據(jù)庫有幾種數(shù)據(jù)類型,然后深入去問比如有沒有深入了解過Redis,說說Redis里面list的底層實(shí)現(xiàn),說說set數(shù)據(jù)類型為何支持去重等等,是一類拓展的問題。
(4)結(jié)合項(xiàng)目中使用
說說你做過的項(xiàng)目里哪些地方用到了Redis數(shù)據(jù)庫。
為什么要在項(xiàng)目中使用Redis數(shù)據(jù)庫。



猜你喜歡:

redis緩存原理與實(shí)現(xiàn):為什么redis可以做緩存?【python面試題】

如何用redis緩存廣告數(shù)據(jù)?【Python面試題】

python編程(redis操作)    

什么是整型?怎樣理解Python的整型?    
黑馬程序員Python+數(shù)據(jù)分析培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們在線交談!