數組:
數組會在內存中開闢一塊連續的空間存儲數據,這種存儲方式有利也有弊端。當獲取數據的時候,直接經過下標值就能夠獲取到對應的元素,時間複雜度爲O(1)
。可是若是新增或者刪除數據會移動大量的數據,時間複雜度爲O(n)
。數組的擴容機制是:
若是數組空間不足,會先開闢一塊新的空間地址,將原來的數組複製到新的數組中。java
鏈表:
鏈表不須要開闢連續的內存空間,其經過指針將全部的數據鏈接起來。新增或者刪除的時候只須要將指針指向的地址修改就好了,時間複雜度爲O(1)
。可是查詢的時間複雜度爲O(n)
。redis
2.一、雙向鏈表數組
雙向鏈表是各個節點之間的邏輯關係是雙向的。
雙向鏈表中節點的組成是:prior:
指向當前節點的前置節點,data:
當前節點存儲的數據。next:
指向當前節點的後置節點。性能
2.二、壓縮鏈表ui
2.三、quicklist鏈表指針
A doubly linked list of ziplists A generic doubly linked quicklist implementation
3.一、雙向鏈表code
3.二、壓縮列表blog
3.三、quicklist鏈表ip
在redis 3.2
版本以前使用的是 雙向鏈表和壓縮鏈表
兩種,由於雙向鏈表佔用的內存要比壓縮鏈表高,因此建立鏈表時首先會建立壓縮鏈表
,在合適的時機會轉化成雙向鏈表
。redis 3.2
以後使用的是quicklist鏈表
。內存