ziplist是壓縮列表,是list和hash的底層實現。
ziplist
是redis爲節約內存佔用而設計的一種線性數據結構
- zlbytes:記錄整個ziplist佔用的內存數
- zltail:記錄壓縮列表尾節點和起始地址有多少字節數,通過這個偏移量,不用逐個遍歷,就可以獲取尾節點的位置
- zllen:記錄壓縮列表中含有的節點數
- zlend:特殊標記,0xFF用於標記壓縮列表的末端
壓縮列表的各個節點組成,如下,previous_entry_length是前一個節點的長度,用於從後向前遍歷,encoding裏面存儲當前節點的長度的數據類型,content是實際存儲數據的部分
quicklist
ziplist是內存緊湊型存儲,但由於使用一維線性數據結構,當數據量大時,更新時內存重新分配,會涉及大數據量的遷移,所以quicklist用ziplist組成雙向列表,列表中的每個節點都是ziplist