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

相关文章
相关标签/搜索