redis主从架构

主从架构主要是主节点负责接收修改数据的请求,然后同步结果给从节点,从节点可以负责接收读取数据的请求从而减轻主节点的压力

这里主节点同步到从节点数据的机制就涉及到了全量复制部分复制的概念

全量复制指的是从节点向主节点发送同步请求,主节点生成此时rdb快照,并将其发送给从节点,从节点删除原有快照数据,并加载主节点发送过来的最新快照进行加载,而这期间产生的新的修改命令主节点会另外存放在一份缓存中,当从节点完成了最新快照的加载后,主节点再把这份修改命令缓存发送给从节点,从节点执行完这些修改命令后,就已经完成了全量数据同步的状态,后面主节点会和从节点通过长链接的方式,把后面新接收的修改命令都发送一份给从节点从而完成后续的同步,这种全量同步一般发生在有新的从节点加入,因为全量复制还是需要时间的,所以对于之前已经有同步过的节点发生断开后的情况,如果可以的话,会采取部分复制,从而减少全量复制的消耗

部分复制指的是主节点会存储近期发生的修改指令缓存并有对应的offset游标

当从节点过来同步数据的时候会带offset参数过来,主节点会从上面的缓存中查找是否有offset下标执行对应的缓存,如果有,则从当前offset下标后面的命令全部返回,从节点执行完后即可完成同步状态,这个一般发生在断线重连的场景.

如果找不到,证明从节点的版本已经太老旧了,会走全量复制

而这里呢又会产生可能有大量从节点向主节点同步数据产生的主从复制风暴的问题

我们可以通过修改从节点的同步节点的配置,由主节点改为其他从节点的复制目标,从而减少主节点的压力,就是部分从节点向主节点同步数据,而其他从节点向上一部分的从节点去同步数据

执行命令的时候又有管道的概念,就是为了减少每条指令的数据传输消耗,我们通过把要执行的指令存放在一条管道中,一次性的发送给redis服务器,redis服务器执行完管道的命令后将结果放在集合中一次性返回,从而减少了网络传输的开销

但是呢,管道又不能提供原子性操作的机制,所以我们引入通过执行lua脚本来实现事务的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值