hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。
✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
人生之义,在于追求,不在成败,勤通大道。加油呀!
个人主页:Ethan Yankang
专栏:史上最强八股文||Java项目
温馨提示:划到文末发现专栏彩蛋 点击这里直接传送
本篇概览:详细讲解了redis篇面试必知必会之redi
目录
三、redis集群
面试官:Redis集群有哪些方案, 知道嘛 ?
面试官:那你来介绍一下主从同步
面试官:能说一下,主从同步数据的流程
面试官:怎么保证Redis的高并发高可用
面试官:你们使用redis是单点还是集群,哪种集群
面试官:redis集群脑裂,该怎么解决呢?
面试官:redis的分片集群有什么作用
面试官:Redis分片集群中数据是怎么存储和读取的?
面试官:Redis是单线程的,但是为什么还那么快?
面试官:能解释一下I/O多路复用模型?
候选人:
嗯~~,在Redis中提供的集群方案总共有三种:主从复制、哨兵模式、Redis分片集群
候选人:
嗯,是这样的,单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,可以搭建主从集群,实现读写分离。一般都是一主多从,主节点负责写数据,从节点负责读数据,主节点写入数据之后,需要把数据同步到从节点中
候选人:
嗯~~,好!主从同步分为了两个阶段,一个是全量同步,一个是增量同步
全量同步是指从节点第一次与主节点建立连接的时候使用全量同步,流程是这样的:
第一:从节点请求主节点同步数据,其中从节点会携带自己的replication id和offset偏移量。
第二:主节点判断是否是第一次请求,主要判断的依据就是,主节点与从节点是否是同一个replication id,如果不是,就说明是第一次同步,那主节点就会把自己的replication id和offset发送给从节点,让从节点与主节点的信息保持一致。
第三:在同时主节点会执行bgsave,生成rdb文件后,发送给从节点去执行,从节点先把自己的数据清空,然后执行主节点发送过来的rdb文件,这样就保持了一致
当然,如果在rdb生成执行期间,依然有请求到了主节点,而主节点会以命令的方式记录到缓冲区,缓冲区是一个日志文件,最后把这个日志文件发送给从节点,这样就能保证主节点与从节点完全一致了,后期再同步数据的时候,都是依赖于这个日志文件,这个就是全量同步
增量同步指的是,当从节点服务重启之后,数据就不一致了,所以这个时候,从节点会请求主节点同步数据,主节点还是判断不是第一次请求,不是第一次就获取从节点的offset值,然后主节点从命令日志中获取offset值之后的数据,发送给从节点进行数据同步
候选人:
首先可以搭建主从集群,再加上使用redis中的哨兵模式,哨兵模式可以实现主从集群的自动故障恢复,里面就包含了对主从服务的监控、自动故障恢复、通知;如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主;同时Sentinel也充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端,所以一般项目都会采用哨兵的模式来保证redis的高并发高可用
候选人:
嗯!,我们当时使用的是主从(1主1从)加哨兵。一般单节点不超过10G内存,如果Redis内存不足则可以给不同服务分配独立的Redis主从节点。尽量不做分片集群。因为集群维护起来比较麻烦,并且集群之间的心跳检测和数据通信会消耗大量的网络带宽,也没有办法使用lua脚本和事务
候选人:
嗯! 这个在项目很少见,不过脑裂的问题是这样的,我们现在用的是redis的哨兵模式集群的。
有的时候由于网络等原因可能会出现脑裂的情况,就是说,由于redis master节点和redis salve节点和sentinel(哨兵)处于不同的网络分区,使得sentinel没有能够心跳感知到master,所以通过选举的方式提升了一个salve为master,这样就存在了两个master,就像大脑分裂了一样,这样会导致客户端还在old master那里写入数据,新节点无法同步数据,当网络恢复后,sentinel会将old master降为salve,这时再从新master同步数据,这会导致old master中的大量数据丢失。
关于解决的话,我记得在redis的配置中可以设置:
第一可以设置最少的salve节点个数,比如设置至少要有一个从节点才能同步数据,
第二个可以设置主从数据复制和同步的延迟时间,达不到要求就拒绝请求,就可以避免大量的数据丢失
候选人:
分片集群主要解决的是,海量数据存储的问题,集群中有多个master,每个master保存不同数据,并且还可以给每个master设置多个slave节点,就可以继续增大集群的高并发能力。同时每个master之间通过ping监测彼此健康状态,就类似于哨兵模式了。当客户端请求可以访问集群任意节点,最终都会被转发到正确节点
候选人:
嗯~,在redis集群中是这样的
Redis 集群引入了哈希槽的概念,有 16384 个哈希槽,集群中每个主节点绑定了一定范围的哈希槽范围, key通过 CRC16 校验后对 16384 取模来决定放置哪个槽,通过槽找到对应的节点进行存储。
取值的逻辑是一样的。
候选人:
嗯,这个有几个原因吧~~~
1、完全基于内存的,C语言编写
2、采用单线程,避免不必要的上下文切换可竞争条件
3、使用多路I/O复用模型,非阻塞IO
例如:bgsave 和 bgrewriteaof 都是在后台执行操作,不影响主线程的正常使用,不会产生阻塞
候选人:
嗯~~,I/O多路复用是指利用单个线程来同时监听多个Socket ,并在某个Socket可读、可写时得到通知,从而避免无效的等待,充分利用CPU资源。目前的I/O多路复用都是采用的epoll模式实现,它会在通知用户进程Socket就绪的同时,把已就绪的Socket写入用户空间,不需要挨个遍历Socket来判断是否就绪,提升了性能。
其中Redis的网络模型就是使用I/O多路复用结合事件的处理器来应对多个Socket请求,比如,提供了连接应答处理器、命令回复处理器,命令请求处理器;
在Redis6.0之后,为了提升更好的性能,在命令回复处理器使用了多线程来处理回复事件,在命令请求处理器中,将命令的转换使用了多线程,增加命令转换速度,在命令执行的时候,依然是单线程。
热门专栏推荐
计算机科学入门系列 关注走一波
CSAPP深入理解计算机原理 关注走一波
微服务项目之黑马头条 关注走一波
redis深度项目之黑马点评 关注走一波
Java面试八股文系列专栏 关注走一波
算法leetcode+剑指offer 关注走一波
总栏
JAVA后端技术栈 关注走一波
JAVA面试八股文 关注走一波
JAVA项目(含源码深度剖析) 关注走一波
计算机四件套 关注走一波
算法 关注走一波
必知必会工具集 关注走一波
书籍网课笔记汇总 关注走一波
考试复习资料 关注走一波
C/C++技术栈 关注走一波
GO技术栈 关注走一波
分栏
JAVA后端技术栈
spring 关注走一波
redis 关注走一波
MySQL 关注走一波
mybatis 关注走一波
mybatisplus 关注走一波
MQ 关注走一波
微服务 关注走一波
设计模式 关注走一波
分布式锁 关注走一波
JAVA八股文
JAVA面试八股文(redis、MySQL、框架、微服务、MQ、JVM、设计模式、并发编程、JAVA集合、常见技术场景)
关注走一波
史上最强JAVA八股文(强烈推荐)
关注走一波
JAVA项目(含源码深度剖析)
黑马头条(微服务) 关注走一波
黑马点评(redis) 关注走一波
计算机四件套
计算机基础 关注走一波
计算机基础 关注走一波
计算机网络 关注走一波
数据结构与算法 关注走一波
算法
leetcode 关注走一波
剑指offer 关注走一波
必知必会工具集 关注走一波
书籍网课笔记汇总
CSAPP笔记 关注走一波
计算机科学速成课 关注走一波
CS自学指南 关注走一波
读书笔记与每日记录 关注走一波
考试复习资料 关注走一波
C/C++技术栈 关注走一波
GO技术栈 关注走一波
非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞 关注❤收藏✅ 评论,大佬三连必回哦!thanks!!!
愿大家都能学有所得,功不唐捐!
热门专栏推荐
计算机科学入门系列 关注走一波
CSAPP深入理解计算机原理 关注走一波
微服务项目之黑马头条 关注走一波
redis深度项目之黑马点评 关注走一波
Java面试八股文系列专栏 关注走一波
算法leetcode+剑指offer 关注走一波
总栏
JAVA后端技术栈 关注走一波
JAVA面试八股文 关注走一波
JAVA项目(含源码深度剖析) 关注走一波
计算机四件套 关注走一波
算法 关注走一波
必知必会工具集 关注走一波
书籍网课笔记汇总 关注走一波
考试复习资料 关注走一波
C/C++技术栈 关注走一波
GO技术栈 关注走一波
分栏
JAVA后端技术栈
spring 关注走一波
redis 关注走一波
MySQL 关注走一波
mybatis 关注走一波
mybatisplus 关注走一波
MQ 关注走一波
微服务 关注走一波
设计模式 关注走一波
分布式锁 关注走一波
JAVA八股文
JAVA面试八股文(redis、MySQL、框架、微服务、MQ、JVM、设计模式、并发编程、JAVA集合、常见技术场景)
关注走一波
史上最强JAVA八股文(强烈推荐)
关注走一波
JAVA项目(含源码深度剖析)
黑马头条(微服务) 关注走一波
黑马点评(redis) 关注走一波
计算机四件套
计算机基础 关注走一波
计算机基础 关注走一波
计算机网络 关注走一波
数据结构与算法 关注走一波
算法
leetcode 关注走一波
剑指offer 关注走一波
必知必会工具集 关注走一波
书籍网课笔记汇总
CSAPP笔记 关注走一波
计算机科学速成课 关注走一波
CS自学指南 关注走一波
读书笔记与每日记录 关注走一波
考试复习资料 关注走一波
C/C++技术栈 关注走一波
GO技术栈 关注走一波
非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞 关注❤收藏✅ 评论,大佬三连必回哦!thanks!!!
愿大家都能学有所得,功不唐捐!