Redis 数据结构

数据结构

在这里插入图片描述

使用全局哈希

  • 目的:用 O(1) 的时间复杂度来快速查找到键值对

新的问题:哈希表的冲突问题和 rehash 可能带来的操作阻塞

解决:Redis 解决哈希冲突的方式,就是链式哈希

新的问题:数据越大,某些哈希冲突链过长,查找耗时长,效率降低

解决:rehash,使用两个全局哈希表

步骤:

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

新的问题:大量的数据拷贝,可能会造成 Redis 线程阻塞,无法服务其他请求。

解决:采用渐进式 rehash

步骤:

  • 在上面第二步拷贝数据时,Redis 仍然正常处理客户端请求,每处理一个请求时,从哈希表 1 中的第一个索引位置开始,顺带着将这个索引位置上的所有 entries 拷贝到哈希表 2 中;等处理下一个请求时,再顺带拷贝哈希表 1 中的下一个索引位置的entries。(没有键值对操作,redis会有一个定时任务执行rehash,缩短整个rehash过程)

好处:

  • 把一次性大量拷贝的开销,分摊到了多次处理请求的过程中,避免了耗时操作,保证了数据的快速访问

底层数据结构类型:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值