Redis面试篇--其他面试题

一、redis集群

面试官:集群有哪些方案知道吗?

答:redis集群有三种方案:

1、主从复制

2、哨兵模式

3、redis分片集群

面试官:介绍一下主从复制

答:redis单节点的并发能力有限,要提高redis并发性能。可以搭建redis主从集群,实现读写分离。一般是一主多从,主节点负责写数据,从节点负责读数据。主节点写入数据后,需要把数据同步到从节点中。

面试官:说一说,主从数据同步的流程

答:主从数据同分为全量同步、增量同步。

全量同步:

第一:从节点请求主节点同步数据,从节点会携带自己replication id 和 offset 偏移量发送给主节点。

第二:主节点判断 从节点的 replication id 是否和自己一致,如果不一致,表示是第一次同步,主节点会把自己的replication id 和 offset发给从节点,从节点保存版本信息。主从节点信息保持一致。

第三:主节点执行bgsave,生成 RDB 数据备份文件,发送给从节点。从节点清空自己的数据,然后执行 RDB 文件,这样主节点,从节点的数据就保持一致了。

注意:在主节点生成rdb 文件期间,如果有请求到了主节点更新数据,主节点会把这些请求,以命令的方式存在缓冲区,就是日志文件,然后将日志文件发送个从节点执行。

增量同步:当从节点宕机了,从新恢复数据,这时候主节点和从节点的数据不一致,从节点请求主节点同步数据。

主节点判断从节点replication id和自己一致,表示不是第一次数据同步,主节点获取offset值,到日志文件中找到offset之后的值,发送给从节点执行,这样就实现了增量同步。

面试官:怎么保证redis的高并发高可用?

答:首先搭建redis主从复制集群保证高可用,然后加上redis的哨兵模式,作为保证机制。

哨兵模式通过sentinal实现,主要功能,服务监控、自动故障恢复、通知。

1、集群中 master宕机,sentinal将集群中的slave提升为新的master,故障恢复后以新的master为主。

2、通知:sentinal还作为redis客户端发现来源,将通知发送给redis客户端,比如新的master信息,以便客户端找到新的master操作数据。

总之可以使用redis的哨兵模式来保证redis的高并发高可用。

面试官:你们的项目使用的redis单节点,还是集群。哪种集群?

答:使用redis主从集群(一主一从)+哨兵模式。

一般单节点不超过10G内存,如果内存不够用,还可以给不同的服务,分配单独的主从节点。尽量不做分片集群,分片集群复炸,维护为成本高。集群之间的心跳检测还会消耗带宽,还不能用lua脚本和事物。

面试官:redis集群脑裂,怎么解决?

答:redis集群脑裂,比如,由于网络原因导致sentinal感知不到master,就会通过选举的方式从slave中选举出新的master,想多于多了个大脑,这时候客户还在old master上写数据,当网络恢复后,sentinal会将old master 降级为slave,从new master上同步数据。这就导致了数据的丢失。

解决这个问题:

可以在redis配置中设置,一、最少slave配置,二、主从数据同步的延迟时间

比如master更新数据时,要求这个master必须要有至少一个slave才能更新数据,这个master同步数据的时候,延迟时间做限定,达不到要求,就拒绝更新数据,这样可以避免大量的数据丢失。

面试官:redis的分片集群有什么用?

答:分片集群主要解决的是,海量数据的存储。

集群中有多个master,每个master存储不同的数据,还可以给每个master设置多个slave。它的并发能力和存储数据的能力很强大。

另一方面,多个master之间通过ping检测彼此的健康状态。类似哨兵模式。当客户请求访问时,可以访问集群中的任意节点,请求最终都会路由到正确的节点上。

面试官:redis分片集群中数据怎么存储和读取?

答:redis集群引入hash槽概念,有16384个hash槽,每个master节点绑定一定范围的hash槽。key通过CRC16算法计算得到一个值,再模于16384得到值,决定放置在哪个槽。通过槽找到对应的节点进行存储。取值的逻辑也是一样的。

面试官:redis是单线程为什么还那么快?

答:

1、redis基于内存,内存的执行很快。

2、redis是单线程,避免不必要上下文切换。

3、使用多路I/O复用模型,非阻塞I/O。

面试官:解释下什么是多路I/O复用模型?

答:单线程监控多个socket实现实现业务。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值