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

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

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

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


(1)問題分析

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



猜你喜歡:

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

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

python編程(redis操作)    

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

分享到:
在線咨詢 我要報名
和我們在線交談!