前面我們使用list實作過佇列 , 現在就來看一下list的底層結構
list有兩種實作方式:
1. 壓縮鏈表
壓縮串列(ziplist)是Redis為了節省記憶體而開發的,是由一系列特殊編碼的連續記憶體塊組成的順序型資料結構,一個壓縮串列可以包含任意多個節點(entry),每個節點可以保存一個位元組陣列或者一個整數值,重點是記憶體連續
2.雙端鏈表
prev和next兩個指標 , 重點是可以從前往后也可以從后往前 , 這就可以實作lpush rpush這些指令了
因為用的鏈表 , 所以這也就導致了lindex指令 , 獲取某個索引值的元素 , 需要遍歷鏈表才可以獲取到 , 時間復雜度是 O(n)
當串列物件可以同時滿足下列兩個條件時,串列物件采用壓縮鏈表編碼:
(1)串列物件保存的所有字串元素的長度都小于64位元組;
(2)串列元素保存的元素數量小于512個;
以上兩個條件的上限值可以在組態檔中修改 list-max-ziplist-value選項和 list-max-ziplist-entries選項
否則采用雙端鏈表編碼
redis3.2版本以后采用的快速串列
quicklist 是一個雙向鏈表,并且是一個ziplist的雙向鏈表,也就是說quicklist的每個節點都是一個ziplist,結合了兩者的優點
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/234807.html
標籤:其他
上一篇:MySQL創建用戶和分配權限
