必须掌握的Redis知识点

 

需要明确的概念:

master(主服务器),slave(从服务器),sentinel(哨兵)

redis持久化的两种方式:RDB和AOF

RDB持久化是在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork(叉)一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。

优点:(1)文件备份只有一个文件,容易查找恢复;(2)灾难恢复效率高;

缺点:(1)如果在定时持久化前出现宕机,数据将丢失;(2)RDB是通过fork子进程来协助完成持久化,如果数据集较大会导致服务器短时间内停止服务

AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

优点:数据安全性更高,可以配置同步持久化

缺点:灾难恢复效率低

主从复制原理

主从多个redis集合在一起,以一个master多个slave为模式对外提供服务,配置master可读可写,配置slave提供读,这样就即能保证redis集群中的数据同步,又可以实现redis的读写分离,如果写比较多的情况一般就以异步的形式提供服务

 

redis主从复制可以根据是否是全量分为全量同步和增量同步

全量同步,一般发生在slave初始化阶段,这时slave需要将master上的所有数据都复制一份

增量同步,slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程,增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令

redis主从同步策略

主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步

注意:如果多个slave断线了,需要重启的时候,因为只要slave启动,就会发送sync请求和主机全量同步,当多个同时出现的时候,可能会导致Master IO剧增宕机

哨兵机制

哨兵是一个分布式系统,可以在一个架构中运行多个哨兵,该系统执行以下三个任务:

 

监控:哨兵会不断地检查master和slave是否运行正常,只需配置主节点的监控即可,通过向主节点发送info,获取从节点的信息,并当有新的从节点加入时可以马上感知

 

提醒:当被监控的redis出现问题时,哨兵通过API向管理员或其他程序发送通知

 

自动故障迁移:当一个master不能正常工作时,它会将失效master中的一个slave升级为新的master(这个master可以进行读写操作),并让失效master的其他slave改为复制新的master,当客户端试图连接到失效master时,集群也会向客户端返回新的master的地址,使得集群可以使用master代替失效的master,如果之前的主服务器恢复,会自动跟随新选举出来的master成为slave

 

哨兵的工作方式:

 

每隔一秒哨兵会向它所知的master,slave以及其他哨兵发送一次ping命令做一次心跳检测,如果ping的时间超过指定值,哨兵节点则认为该节点错误或下线,主观下线

 

如果一个master被标记为主观下线,则监视这个master的所有哨兵都要以每秒一次的频率确认master的确进入了主观下线状态,当有足够数量的哨兵(大于配置文件的值)确认master进入主观下线状态,则master会标记为客观下线

 

 

 

缓存穿透及优化

 

缓存穿透是指查询一个不存在的key数据,由于缓存没命中需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,流量大时DB会挂掉,这也是经常提的缓存命中率问题

 

解决:

1.如果查询数据库也为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库,这种办法最简单粗暴

 

2.在控制层对要查询的key进行校验,不符合则丢弃,然后再放行给后面的正常缓存处理逻辑

缓存击穿及优化

与缓存雪崩的区别在于这里针对某一key缓存过期,雪崩很多key

缓存雪崩及优化

缓存雪崩是由于大量的key设置了相同的过期时间,原有缓存失效,新缓存未到期间。所有请求都去查询数据库,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机造成整个系统崩溃

为什么设置过期时间:比如我们在发送手机验证码的时候,将手机号作为redis key,验证码作为redis value存储在redis中,并设置过期时间为60秒,如果60秒的时间到了,懂了没?

解决:

1.一般并发量不是特别多的时候,使用最多的解决方案是加锁排队

 

2.高并发下给每一个缓存数据增加相应的缓存标记,用来记录缓存的是否失效,如果缓存标记失效,则更新数据缓存

 

3.简单有效的方法:缓存失效时间分散开,比如我们可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值