Redis(3)—— 数据结构和内部编码

type命令实际返回的就是当前键的数据结构类型, 它们分别是:
string( 字符串) 、 hash( 哈希) 、 list( 列表) 、 set( 集合) 、 zset( 有序集合) , 但这些只是Redis对外的数据结构, 如图2-1所示。
实际上每种数据结构都有自己底层的内部编码实现, 而且是多种实现,这样Redis会在合适的场景选择合适的内部编码, 如图2-2所示。
可以看到每种数据结构都有两种以上的内部编码实现, 例如list数据结构包含了linkedlist和ziplist两种内部编码。 同时有些内部编码, 例如ziplist,可以作为多种外部数据结构的内部实现, 可以通过object encoding命令查询内部编码:
127.0.0.1:6379> object encoding hello
"embstr"
127.0.0.1:6379> object encoding mylist
"ziplist"


可以看到键hello对应值的内部编码是embstr, 键mylist对应值的内部编码是ziplist。
Redis这样设计有两个好处: 第一, 可以改进内部编码, 而对外的数据结构和命令没有影响, 这样一旦开发出更优秀的内部编码, 无需改动外部数据结构和命令, 例如Redis3.2提供了quicklist, 结合了ziplist和linkedlist两者的优势, 为列表类型提供了一种更为优秀的内部编码实现, 而对外部用户来说基本感知不到。 第二, 多种内部编码实现可以在不同场景下发挥各自的优
势, 例如ziplist比较节省内存, 但是在列表元素比较多的情况下, 性能会有所下降, 这时候Redis会根据配置选项将列表类型的内部实现转换为linkedlist。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值