Redis数据结构底层原理

Redis数据结构底层原理



Redis数据结构

数据结构底层原理
String
类型
String的底层原理是基于 动态字符串 (SDS) 实现的,它不仅保存了数据char[],而且保存了缓冲区已经占用空间的长度,以及缓冲区剩余可用空间的长度。

SDS相对于字符串char的优势:
(1) 修改SDS时,可以预先检查SDS的缓冲区空间是否足够,如果足够会先拓展SDS的空间,以防止缓冲区溢出。而char字符串不会检查缓冲区是否足够,容易出现溢出情况。
(2) SDS有着预分配空间的机制,可以减少为字符串重新分配空间的次数。
List
类型
List的底层原理是基于 双向链表 实现的。
Hash
类型
Hash的底层原理是基于 字典 实现的, 其解决哈希冲突的方法采用的是拉链法,具体的就是将哈希表的装载因子维持在一个合理的范围之内,方便rehash。
Set
类型
Set的底层原理是基于 intset数据结构和字典 实现的。
(1) 当存储的数据全都是整数类型,且数量小于512个时,会使用intset存储数据。intset是一个由整数组成的有序集合,可以进行二分查找。
(2) 当不满足使用intset的条件时,都使用字典存储数据,同样是使用拉链法解决哈希冲突。
zSet
类型
zset中的每个元素包含数据本身和一个对应的分数(score)。zset的数据本身不允许重复,但是score允许重复。其底层原理是:
(1) 当数据较少时,使用 ziplist (压缩列表) 存储数据,它是一种特殊的双向链表。ziplist占用连续内存,每项元素都是(数据+score)的方式连续存储,按照score从小到大排序。
(2) 当数据较多时,使用 字典 + 跳表 实现:字典用于根据key值查询score,跳表根据socre查找数据 (时间复杂度O(logN))。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值