剑指Offer(Redis)——Pipeline及主从同步模式和哨兵模式

Pipeline

加入使用Redis进行批量生产数据然后存入缓存,一般情况下是上一条缓存存完之后才轮到下一个存储指令的执行,这样肯定会让Redis性能降低,实际上Redis对此情况进行了一定的优化,优化方法就是Redis针对Pipeline的使用:

  1. Pipeline和Linux的管道类似;
  2. Redis基于请求/响应模型,单个请求处理需要一一应答;
  3. Pipeline批量执行指令,节省多次IO往返的时间;
  4. 有顺序依赖的指令建议分批发送。

Redis同步机制

主从同步原理

通常Redis都是由一个Master和若干Slave组成的,Master负责写,Slave负责读(Master纯写是为了提升性能)。

每个Master-Slave都代表一个Redis-Server实例:
在这里插入图片描述
为了保证Redis最终一致性,不一定要保证Master和Slave之间的数据一定要一直都是同步的,但是肯定会经过一段时间会趋于同步,这就是最终一致性。

Redis可以如上图所示进行主从同步也可以进行从从同步。

第一次同步时候,Master做一次BGSAVE并同时将后续的修改操作记录到内存Buffer中,操作结束之后将RDB同步到Slave中当Slave接收到RDB文件之后,就会将RDB文件作为镜像加载到内存中,等同步到内存之后还会将这一系列在Master的操作和增量的数据再发送给Slave进行同步信息。

所谓同步也是分为两种的,一种是全同步,一种是增量同步。将这两种同步讲解一下:

  • 全同步过程

1、Slave发送sync命令到Master;
2、Master启动一个后台进程,将Redis中的数据快照保存到文件中;
3、Master将保存数据快照期间接收到的写命令缓存起来;
4、Master完成写文件操作后,将该文件发送给Slave;
5、使用新的AOF文件替换掉旧的AOF文件;
6、Master将这期间收集的增量写命令发送给Slave端。

  • 增量同步过程

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

主从同步也是有一定的弊端:

  • 不具备高可用性,Master挂掉之后就不提供写入缓存的接口
  • Redis为解决这个问题t提供了Redis Sentinel就是哨兵模式

Redis Sentinel

解决主从同步Mater宕机后主从切换问题:

  • 监控:检查主从服务器是否运行正常
  • 提醒:通过API向管理员或者其他应用程序发送故障通知
  • 自动故障迁移:当出现Master宕机之后使用投票协议(类似Zookeeper)选择剩下的Slave中的一个来当Master,重新主从同步,代替之前的Master

使用流言协议Gossip来接收主服务器是否下线的信息,可以实现的功能如下:

  • 每个节点都随机的与对方通信,最终所有的节点状态达成一致
  • 种子节点定期随机向其他节点发送节点列表以及需要传播的信息
  • 不保证信息一定会传递给所有节点,但是最终会趋于一致
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值