Redis的五種數據結構的內部編碼

 

實際上每種數據結構都有本身底層的內部編碼實現,並且是多種實現,這樣Redis會在合適的場景選擇合適的內部編碼。數據結構

能夠看到每種數據結構都有兩種以上的內部編碼實現,例如string數據結構就包含了raw、int和embstr三種內部編碼。性能

同時,有些內部編碼能夠做爲多種外部數據結構的內部實現,例如ziplist就是hash、list和zset共有的內部編碼。編碼

咱們能夠經過object encoding命令查詢內部編碼:設計

127.0.0.1:6379> set set:1 hello
OK
127.0.0.1:6379> object encoding set:1
"embstr"
127.0.0.1:6379> hset user:1 name kebi
(integer) 1
127.0.0.1:6379> object encoding user:1
"ziplist"

Redis會根據當前值的類型和長度決定使用內部編碼實現,Redis這樣設計有兩個好處:3d

第一,能夠改進內部編碼,而對外的數據結構和命令沒有影響,這樣一旦開發開發出優秀的內部編碼,無需改動外部數據結構和命令。code

第二,多種內部編碼實現能夠在不一樣場景下發揮各自的優點。例如ziplist比較節省內存,可是在列表元素比較多的狀況下,性能會有所降低,blog

  這時候Redis會根據配置選項將列表類型的內部實現轉換爲linkedlist。ip

相關文章
相關標籤/搜索