Redis(开发与运维):11---Redis数据结构与内部编码(OBJECT ENCODING)
一、五大数据结构Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为:STRING:字符串LIST:列表SET:集合HASH:散列ZET:有序集合TYPE命令用来获得键的数据类型,而不是键值的数据类型返回值:string:字符串类型hash:散列类型list:列表类型set:集合类型zet:有序集合类型二、内部编码实际上每种数据结构都有自己底层的内部编码实现,而且是多种实
·
一、五大数据结构
- Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为:
- STRING:字符串
- LIST:列表
- SET:集合
- HASH:散列
- ZSET:有序集合


TYPE命令
- 用来获得键的数据类型,而不是键值的数据类型
- 返回值:
- string:字符串类型
- hash:散列类型
- list:列表类型
- set:集合类型
- zet:有序集合类型
二、内部编码
- 实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现, 这样Redis会在合适的场景选择合适的内部编码,如下图所示

- 关于这些数据结构的详细介绍可以参阅:
- raw、int、embstr(动态字符串):Redis(设计与实现):01---数据结构之SDS动态字符串(raw、embstr、int、struct sdshdr)_董哥的黑板报的博客-CSDN博客
- hashtable(哈希表):Redis(设计与实现):03---数据结构之字典(hashtable、struct dictht、struct dictEntry、struct dict)_董哥的黑板报的博客-CSDN博客
- ziplist(压缩列表):Redis(设计与实现):06---数据结构之压缩列表(ziplist、struct ziplist)_董哥的黑板报的博客-CSDN博客
- linkedlist(链表):Redis(设计与实现):02---数据结构之链表(linkedlist、struct listNode、struct list)_董哥的黑板报的博客-CSDN博客_listnode和linkedlist
- intset(整数集合):Redis(设计与实现):04---数据结构之整数集合(intset、struct intset)_董哥的黑板报的博客-CSDN博客
- skiplist(跳跃表):Redis(设计与实现):05---数据结构之跳跃表(skiplist、struct zskiplistNode、struct zskiplist)_董哥的黑板报的博客-CSDN博客
- Redis这样设计有两个好处:
- 第一,可以改进内部编码,而对外的数据结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数 据结构和命令,例如Redis3.2提供了quicklist,结合了ziplist和linkedlist两者的优势,为列表类型提供了一种更为优秀的内部编码实现,而对外部用户来 说基本感知不到
- 第二,多种内部编码实现可以在不同场景下发挥各自的优势,例如ziplist比较节省内存,但是在列表元素比较多的情况下,性能会有 所下降,这时候Redis会根据配置选项将列表类型的内部实现转换为 linkedlist
OBJECT ENCODING命令
- 该命令用来返回数据结构的内部编码
更多推荐




所有评论(0)