redis第二讲 redis数据结构

redis 第二讲

redis为什么快:
一方面,这是因为它是内存数据库, 所有操作都在内存上完成,内存的访问速度本身就很快。
另一方面,这要归功于它的数据结构。这是因为,键值对是按一定的数据结构来组织的,操作键值对最终就是对数据结构 进行增删改查操作,所以高效的数据结构是 Redis 快速处理数据的基础。

为了实现从键到值的快速访问,Redis 使用了一个哈希表来保存所有键值对。哈希桶中的元素保存的并不是值本身,而是指向具体值的指针。

当哈希表里写入的数据越来越多,redis会做rehash操作(增加现有的哈希桶的数量)。三步:

  1. 给哈希表 2 分配更大的空间,例如是当前哈希表 1 大小的两倍;
  2. 把哈希表 1 中的数据重新映射并拷贝到哈希表 2 中;
  3. 释放哈希表 1 的空间。

如果一次性把哈希表 1 中的数据都 迁移完,会造成 Redis 线程阻塞,无法服务其他请求。为了避免这个问题,Redis 采用了渐进式 rehash。
渐进式rehash:每处理一个请求 时,从哈希表 1 中的第一个索引位置开始,顺带着将这个索引位置上的所有 entries 拷贝 到哈希表 2 中;等处理下一个请求时,再顺带拷贝哈希表 1 中的下一个索引位置的 entries。
压缩列表:压缩列表实际上类似于一个数组,数组中的每一个元素都对应保存一个数据。和数组不同 的是,压缩列表在表头有三个字段 zlbytes、zltail 和 zllen,分别表示列表长度、列表尾的 偏移量和列表中的 entry 个数;压缩列表在表尾还有一个 zlend,表示列表结束。
跳表:增加了多级索引,通过索引位置的几个跳转,实现数据的快速定位。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

为什么数组和压缩列表复杂度高还要用?因为数组很紧凑,提高内存利用率。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值