Redis的集群方案
主要分为以下几种:
主从复制
哨兵模式
分片集群
主从复制
单节点Redis的并发能力是有上限的,通过搭建主从集群,可以提高并发能力,实现读写分离(读多写少,主节点写,从节点读)
主从数据同步流程
主从全量同步
从节点执行replicaof命令,建立连接
从节点向主节点发送数据同步请求,里面包含了从节点的replication id和offset
主节点判断该从节点是不是第一次同步(就是看主从节点的replication id是否一致):
①如果是第一次同步,给从节点发送主节点版本信息(replication id和offset),从节点保存版本信息,同时主节点执行bgsave,生成RDB,发送给从节点。
从节点清空本地数据,执行RDB文件。
主节点记录RDB期间的所有新请求到一个repl_baklog文件中,再将repl_baklog文件的命令发送给从节点,从节点执行收到的命令,这样就保持了数据的一致。
增量同步
②如果不是第一次同步,主节点判断从节点发送过来的replication id和自己的replication id是一致的,主节点就不会去bgsave生成 RDB文件了,而是通过repl_baklog文件去同步数据,将主节点从节点offset差距的那部分数据传给从节点
Replication Id:是数据集的标记,id一致则说明是同一数据集,每一个主节点都有唯一的replication id,从节点会继承主节点的replication id。
offset:偏移量,随着记录在repl_baklog中的数据增多而增大,从节点完成同步时也会记录当前的offset,如果从节点的的offset小于主节点的offset,就说明从节点数据落后于主节点,需要更新。
主从节点之间存在心跳检测机制,这样就知道主节点最新偏移量offset是多少,从节点就能向主节点更新数据了。