Redis高级知识点详解

本文深入探讨Redis的高级知识点,包括数据删除的三种策略——定时删除、惰性删除和定期删除,以及主从复制的作用,如读写分离、负载均衡和故障恢复。此外,还介绍了哨兵模式下的master选举算法。

1.数据删除与淘汰策略

1.1Redis中的数据特征

删除策略就是针对已过期数据的处理策略
问题: 已过期的数据是真的就立即删除了吗?
回答: 其实也不是,会有多种删除策略,在不同的场景分情况使用不同的删除策略来进行删除数据。

Redis是一种内存级数据库,所有数据都存放在内存中,内存中的数据可以通过TTL指令获取其状态
TTL返回的值有三种情况:正数,-1,-2

  • 正数:代表该数据在内存中还能存活多长时间
  • -1:永久有效的数据
  • -2:已经过期的数据 或被删除的数据 或未定义的数据

1.2数据删除的三种策略

  • 1.定时删除
  • 2.惰性删除
  • 3.定期删除

定时删除策略:
创建一个定时器,当key设置有过期时间,并且过期时间到达时,由定时器立即对键的删除操作

  • 优点:节约内存,到时间就删除,快速释放掉不必要的内存占用
  • 缺点:CPU压力大,会影响redis服务器响应时间和指令吞吐量
  • 简易理解:用处理器性能换取存储空间(拿时间换空间)

惰性删除:
据到达过期时间,不做处理,等下次访问该数据时,需要判断
1.如果未过期,返回数据
2.发现已经过期,删除,返回不存在

  • 优点:节约CPU性能,发现必须删除的时候才删除
  • 缺点:内存压力大,出现长期占用内存的数据
  • 简单理解:用存储空间换取处理器性能(拿时间换空间)

定时删除:
定时删除和惰性删除这两种方案都是走的极端,而定期删除则是折中的方案

  • Redis启动服务器初始化时,读取配置server.hz的值,默认为10(具体可以根据电脑CPU性能调)
  • 每秒钟执行server.hz次serverCron()-------->databasesCron()--------->activeExpireCycle()
  • activeExpireCycle() 对每个expires[*]逐一进行检测,每次执行耗时:250ms/server.hz
  • 对某个expires[*]检测时,随机挑选x个key检测

如果key超时,删除key
如果一轮中删除的key的数量>W25%,循环该过程
如果一轮中删除的key的数量≤W
25%,检查下一个expires[*],0-15循环
W取值=ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值

  • 参数current_db用于记录activeExpireCycle() 进入哪个expires[*] 执行

  • 如果activeExpireCycle()执行时间到期,下次从current_db继续向下执行

  • 特点1:CPU性能占用设置有峰值,检测频度可自定义

  • 特点2:内存压力不是很大,长期占用内存的冷数据会被持续清理

  • 简单理解:周期性抽查存储空间(随即抽查,重点检查)

2.主从复制

三高架构

  • 高并发

很多用户同时访问的能力,成为高并发

  • 高可用

速度快,时间短

  • 高可用

简单计算:一个服务一年中宕机时间总和的秒数
1年=365246060=31536000秒
可用性就是=(31536000-宕机总秒数)/31536000
100%=?

业界可用性目标5个9,就是99.999%,服务器年宕机时长低于315秒

2.1主从复制的作用

  • 读写分离:master写、slave读,提高服务器的读写负载能力
  • 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数 量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量
  • 故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复
  • 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式
  • 高可用基石:基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案

3.哨兵模式

哨兵
哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控,当主(master)出现故障时通过投票机制选择新的master并将所有slave连接到新的master

注意: 哨兵也是一台redis服务器,只是不提供数据相关服务,通常哨兵的数量配置为单数

判断master是否宕机的两种状态

sdown和odown
sdown: 主观宕机,就是只有一个哨兵发现master宕机了就是主观宕机
odown: 客观宕机,就是quorum数量的哨兵都觉得master宕机了就是客观宕机
sdown达成的条件: 如果一个哨兵ping一个master,当这个master超过了is-master-down-after-milliseconds指定的毫秒后,就会认为主观宕机
sdown到odown的条件 发现master宕机的一个哨兵会告诉所有的哨兵这个master挂了,所以所有的哨兵都会去给挂的这个master发送请求,确认是否真的挂了,如果所有的哨兵都发现这个master挂了的话,就是客观宕机

slave到master的选举算法

  • 不在线的OUT
  • 响应慢的OUT
  • 与原master断开时间久的OUT
  • 优先原则
    优先级
    (1)按照slave优先级进行排序,slave priority越低,优先级就越高
    (2)如果slave priority相同,那么看replica offset,哪个slave复制了越多的数据,offset越靠后,优先级就越高
    (3)如果上面两个条件都相同,那么选择一个run id比较小的那个slave
    选出新的master之后,发送指令给其他的slave:
  • 向新的master发送slaveof no one
  • 向其他的slave发送slaveof新的masterIP端口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值