Redis数据结构

2021-06-07  本文已影响0人  LHZ_123

数据类型

数据结构

sds-简单动态字符串

list-双向链表

1)每个链表节点由一个listNode结构来表示,每个节点都有一个指向前置和后置节点的指针
2)每个链表使用一个list结构来表示,这个结构中含有 表头节点指针、表尾节点指针、以及链表长度等信息
3)链表的表头的前置节点和表尾的后置节点指向都是NULL,所以是无环链表
4)通过为链表设置不同的类型特定函数,Redis可用于保存各种不同类型的值

hash-哈希表(字典)

1)字典广泛 应用于Redis的各种功能,包括数据库 和哈希键
2)Redis的字典底层使用哈希表实现,每个字典有两个哈希表,一个平时使用,另一个在进行rehash时使用
3)Redis使用MurmurHash2算法来计算哈希值
4)Redis使用链地址法来解决键冲突,相同hash值的键值对会连接成一个单向链表
5)哈希表进行扩展或收缩时,需要将现有哈希表的所有键值对rehash到新哈希表中,这个rehash过程不是一次性完成的,而是渐进式完成的

zskiplist-跳跃表

1)有序集合的底层实现之一
2)由zskiplist和zskiplistNode两个结构组成,其中zskiplist用于保存跳跃表的表头节点、表尾节点、长度等信息,zskiplistNode用于表示跳跃表节点
3)每个跳跃表节点的层高都是1~32之间的随机数
4)同一个跳跃表中,多个节点可以包含相同的分值,但每个节点的成员对象必须是唯一的
5)跳跃表的节点按照分值大小进行排序,当分值相同时,节点按照成员对象的大小进行排序

intset-整形数组

1)是集合建的底层实现之一
2)底层实现为数组,以有序、无重复的方式保存集合元素,在需要时,会根据新添加的元素类型,改变这个数组的类型。比如默认是int8_t,如果放入的元素大小为int32_t,则程序会将数组的类型更改为int32_t
3)自动升级适配新类型元素,带来了操作上的灵活,并且尽可能地节约了内存
4)只支持升级操作,不支持降级 操作

ziplist-压缩列表

1)为了节约内存而开发的顺序型数据结构
2)是列表键和哈希键的底层实现之一
3)包含多个节点,每个节点可以保存一个字节数组或整数值
4)添加新节点或删除节点,可能会引发连锁的更新操作,但几率很小

数量类型和数据结构的关系

image.png
上一篇下一篇

猜你喜欢

热点阅读