redis常见问题分析

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

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

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

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

它主要有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的值。
相关文章
相关标签/搜索