redis常见问题分析

1. 如何保证redis高可用和高并发

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

2. redis高可用具体怎么实施

建议使用官方的哨兵机制,当主节点出现故障,由Sentinel自定完成故障发现和转移,并通知应用方,实现高可用性。

它主要有4个功能:

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

3. 哨兵机制的原理

通过sentinel模式启动redis后,自动监控master/slave运行状况。基本原理是:心跳检测和投票裁决。

每个sentinel会向其他sentinel、master、slave定时发送消息,如果在指定时间内没有回应,则暂时认为对方宕机。

如果哨兵群组中多数sentinel都报告某一节点没有响应,才会认为该节点真正宕机。通过Raft投票算法,从剩下的slave节点中选出一台提升为新的matser,然后自动修改相关配置。

4. redis哨兵部署需要注意什么

至少3个实例,以保证群组的健壮性。

5. redis主从架构会丢失数据吗?为什么

  • 异步复制导致的数据丢失:因为master->slave数据复制是异步的,在异步复制前,如果master就宕机了,那后面即将复制的数据就丢失了。
  • 脑裂导致的数据丢失:某个master所在的机器脱离了正常的网络,导致slave连接不上master,实际上master还在运行着。但哨兵认为master已经失去连接,并且重新选取了一个slave提升为master,这会集群中就会出现2个master节点。但client客户端还没来得及切换到新的master节点,依旧会把数据写入旧的master中。那当旧的master恢复正常的时候,会被当做一个slave节点挂倒新的master下面,原数据会被清空,重新从新的master复制一份数据。

6. redis主从复制的原理

  • 一个slave实例,无论是第一次连接还是重连到master,都会发出SYNC命令;
  • master收到请求后,会做两件事:a)master执行BGSAVE,即在后台保存数据到硬盘(rdb快照);b)master同时将新收到的写入和修改命令存入缓冲区(非查询类);
  • master在将数据存入硬盘文件成功后,将这个快照文件发送给slave,slave收到快照后会会清空内存,加载这个文件到内存中;
  • master也会将缓冲区的命令,以redis命令协议的形式转发给slave,slave执行这些命令,实心和master的同步;
  • master/slave此后会不断通过异步的方式进行命令同步,达到最终的数据同步一致。

7. redis过期策略有哪些

  • 惰性删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期的key;
  • 定期删除:因为惰性删除无法保证冷数据及时删除,所以redis会定期主动淘汰一批过期数据;
  • 主动删除:当前已用内存超过maxMemory限定时,触发主动清除策略,主动删除的前提是设置了maxMemory的值。

你可能感兴趣的:(redis)