Pipline和主从同步

Pipline

  • Pipline和Linux管道类似
  • Redis基于请求/响应模型,单个请求处理需要一一作答
  • Pipline批量执行命令,节省多次I/O往返时间
  • 有顺序依赖的指令建议分批发送

Redis同步机制

主从同步原理

截屏2021-01-11 下午11.50.42

全量同步过程

  1. Slave发送一个sync同步命令给Master要求全量同步。
  2. Master接收到从服务的sync同步命令时,会fork一个子进程后台执行bgsave命令(非阻塞)快照保存,生成RDB文件。
  3. Master将保存数据快照期间收到的写命令缓存起来
  4. Mater完成写文件操作后将RDB文件发送给Slave
  5. Slave将接收到的RDB文件载入自己的redis内存。
  6. 待Slave将RDB载入完成后,主服务再将缓冲区所有写命令发送给从服务。
  7. 从服务在将主服务所有的写命令载入内存从而实现数据的完整同步。
  8. 从服务下次在需要同步数据时只需要发送自己的offset位置(相当于MySQL binlog的位置)即可,只同步新增加的数据,再不需要全量同步。

增量同步过程

  1. Master接收到用户的操作指令,判断是否需要传播到slave
  2. 将操作记录追加到AOF文件
  3. 将操作传播到其他Slave:
    1. 对齐主从库
    2. 往响应缓存写入指令
  4. 将缓存中的数据发给Slave

主从模式弊端

不具备高可用性

Master挂掉后就不能进行写操作

Redis Sentinel(Redis 哨兵)

解决主从同步Master宕机后的主从切换问题

  • 监控:检查主从服务器是否运行正常
  • 提醒:通过API向管理员发送故障通知
  • 自动故障迁移:主从切换

流言协议 Gossip

在杂乱无章中寻求一致

  • 每个节点随机的与对方通信,最终所有节点状态达成一致
  • 种子节点定期随机向其他节点发送节点列表以及需要传播的消息
  • 不保证信息一定会传给所有节点,但最终会趋于一致