Redis面试8连问

2021/4/12 2:28:43

本文主要是介绍Redis面试8连问,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Redis

          • 1、如何保证Redis高可用和高并发
          • 2、Redis高可用方案具体怎么实施
          • 3、说说哨兵机制的原理
          • 4、部署Redis哨兵要注意哪些问题
          • 5、Redis主从架构数据会丢失吗 为什么
          • 6、Redis主从复制的工作原理
          • 7、由于主从延迟导致读取的数据过期怎么处理
          • 8、Redis key的过期策略有哪些

转自:微信公众号-Java技术栈 2020-09-29

1、如何保证Redis高可用和高并发

redis主从架构,一主多从,可以满足高可用和高并发,出现实例宕机进行主备切换,配置读写分离缓解Master读写压力。

2、Redis高可用方案具体怎么实施

使用官方推荐的哨兵(sentinel)机制就能实现,当主节点出现故障时,由Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性,
它有四个主要功能:

  • 集群监控,负责监控redis master和slave进程是否正常工作。
  • 消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
  • 故障转移, 如果某个master node挂掉了,会自动转移到slave node上。
  • 配置中心,如果故障转移发生了,通知client客户端新的master地址。
3、说说哨兵机制的原理

通过sentinel模式启动Redis后,自动监控master/slave的运行状态,基本原理是,心跳机制+投票裁决。

每个sentinel会向其他sentinel,master,slave定时发消息,以确认对方是否活着,如果发现对方在指定时间未回应,则暂时认为对方宕机。

若哨兵群中多数sentinel都反应某一master没响应,系统才认为该master真正宕机,通过Raft投票算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。

4、部署Redis哨兵要注意哪些问题

哨兵至少需要3个实例 ,来保证自己的健壮性,…有待补充。

5、Redis主从架构数据会丢失吗 为什么

有两种数据丢失的情况:
1)异步复制导致的数据丢失:因为master->slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机了。此时这些数据就丢失了
2)脑裂导致的数据丢失:某个master所在机器突然脱离了正常的网络,跟其他slave机器不能连接,但是实际上master还活着,此时哨兵可能会认为master宕机了,然后开启选举将其他的slave切换成了master。这个时候,集群就会有两个master,也就是所谓的脑裂,此时虽然某个slave被切换成master,但是client可能还没来得及切换新的master,继续写向旧的master的数据可能也丢失了。因此旧的master再次恢复的时候,会被作为一个slave挂到新的master,自己的数据将被清空,重新从新的master复制数据。

6、Redis主从复制的工作原理

1)一个slave实例,无论是第一次连接还是重新连接到master,都会发出一个SYNC命令。
2)当master收到SYNC命令之后,会做两件事,master在后台保存数据到磁盘(rdb快照文件)和master将新收到的写入和修改数据集的命令存入缓冲区(非查询类)。
3)当master在后台把数据保存到快照文件之后,master会把这个快照文件传输给slave,而slave把内存清空以后,加载该文件到内存中。
4)master也会把此前收集到缓冲区的命令,通过redis命令协议形式转发给slave,slave执行这些命令,实现和master同步。
5)master/slave此后会不断通过异步方式进行命令的同步,达到最终的数据一致。

7、由于主从延迟导致读取的数据过期怎么处理

1)通过scan命令扫库,当redis的key被扫到的时候,相当于访问了该key,同样也会做过期检测,充分发挥redis惰性删除的策略,这个方法大大降低脏数据的读取概率,但缺点是会给数据库造成一定的压力,否则影响线上业务的压力。
2)redis加入了一个新特性解决主从不一致导致数据过期,增加了key是否过期以及对主从库的判断,如果key已经过期,当前访问的master则返回null,当前访问的是从库,执行的只读命令也返回null。

8、Redis key的过期策略有哪些

1)惰性删除:当读或写到一个过期key,会触发惰性删除策略,直接删除这个过期key,这是被动的。
2)定期删除:由于惰性删除无法保证冷数据被及时清理,所以redis会定期淘汰一批过期key。
3)主动删除:当前已用内存超过maxMemory限定时,触发主动清理策略。主动设置的前提是设置了maxMemory的值。



这篇关于Redis面试8连问的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程