1. 程式人生 > >redis的Hash型別底層儲存結構

redis的Hash型別底層儲存結構

redis的雜湊物件的底層儲存可以使用ziplist(壓縮列表)和hashtable。當hash物件可以同時滿足一下兩個條件時,雜湊物件使用ziplist編碼。

  • 雜湊物件儲存的所有鍵值對的鍵和值的字串長度都小於64位元組
  • 雜湊物件儲存的鍵值對數量小於512個

使用ziplist編碼方式的雜湊物件不能實現O(1)複雜度的基本操作,而是通過遍歷來查詢元素,時間複雜度是O(N^2)

使用hashtable編碼方式,時間複雜度是O(1)

 

為什麼redis的hash資料型別採用ziplist和hashtable兩種結構儲存資料呢?下面是我從網上找的答案

hash型別的內部編碼有兩種:

(1)      ziplist(壓縮列表)

當雜湊型別的元素個數小於hash-max-ziplist-entries配置(預設512個),同時所有值都小於hash-maxziplist-value配置(預設為64位元組),Redis會使用ziplist做為雜湊的內部實現。Ziplist可以使用更加緊湊的結構來實現多個元素的連續儲存,所以在節省記憶體方面更加優秀。

(2)      hashtable(雜湊表)

當雜湊型別無法滿足ziplist要求時,redis會採用hashtable做為雜湊的內部實現,因為此時ziplist的讀寫效率會下降