Redis持久化机制在必定程度上缓解了宕机/重启带来的业务数据丢失问题,但当单实例所在的物理节点发生不可恢复故障时,如何保证业务数据不丢以及如何在故障期间迅速的恢复对应业务数据的可用性成为单点结构的挑战。缓存
在分布式系统中为了解决单点问题,Redis一般会把数据复制多个副本部署到其余机器,知足故障恢复和负载均衡等需求。网络
Redis根据版本的不一样,提供了两个命令分别是:sync和psync,其中当Redis版本小于2.8时,只能使用sync命令实现全量复制,而当Redis版本大于等于2.8时,可使用psync命令实现全量复制和部分复制,所以彻底可使用psync命令替代sync命令,由于psync命令提供的部分复制,可以有效的减小数据创传输开销。接下来咱们分别来看下这两个命令的具体实现原理。负载均衡
Redis包含master和slave两种节点,master节点对外提供读写服务,slave节点拥有master节点的全量数据,对外不提供写服务。主被复制由slave主动触发,流程以下运维
另外须要注意的是,若是有多个slave节点发送sync命令给master,只要第二个slave的sync命令发生在master完成bgsave以前,第二个slave将收到和第一个slave相同的快照和后续backlog。不然,第二个slave的sync将触发master的第二次bgsave。分布式
从节点使用psync命令完成部分复制和全量复制功能,命令格式spa
psync {runid} {offset},其中runid是从节点复制主节点的运行id;offset是当前从节点已复制的数据偏移量。流程以下资源
master节点根据psync参数和自身数据状况决定相应结果:开发
本文主要讲了Redis提供的两种复制流程:全量复制和部分复制,全量复制须要同步master节点的所有数据,大量消耗资源。而部分复制可以有效减小因网络异常等缘由形成的没必要要全量复制状况。部署
《Redis开发与运维》《深刻分布式缓存》同步