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的值。