Redis 主从数据不一致有哪些场景以及如何解决

主从切换

生产环境的主从间的数据复制通常都是异步进行的,当进行failover时,可能会出现在数据没有完全同步到从库的情况下进行了主从切换

解决方案:
• 【择优选择】主从切换时优先选择同步进度更加靠前的节点,尽可能的减少数据丢失
• 【缩短主库持久化的周期性间隔】

主从延迟

主从延迟带来的现象主要有以下2种情况

  1. 主库有从库没有
  2. 主库没有从库却有

上述情况1大家都好理解,这里我重点介绍下情况2.主库没有从库却有的情况,举个例子,当一个key设置过期时间比如1分钟,expire 60 到redis中过期时间其实是(当前timestamp+60*1000),由于主从同步会有一定的延迟,从库当前timestamp的值会大于主库当前stimestamp的值,假若延迟5秒, 也就是说会有5秒的gap主库查不到但是从库却可以查到的情况。

解决方案:

  • 【降低延迟】提升网络环境,主从节点尽可能是在一个局域网中
  • 【使用expireAt代替expire命令】

新增从节点

新增一个从节点,整个流程大致这个样子的

  1. 主库生成一份rdb文件
  2. 主库将rdb文件同步到从库
  3. 从库载入rdb文件到自身内存

问题造成的原因:

  1. 主库在做RDB快照文件的时候,发现key已经过期了,则此时不会将过期的key写到RDB文件中。
  2. 从库在load RDB文件到内存中的时候,发现key已经过期了,则此时不会将过期的key load进去。

点评:这个对于我们做数据校验的时候会有些影响,会觉得key不一致,但是不影响业务逻辑。

解决方案:
修改源码在生成与载入rdb文件时,不进行过期化判断,详细参见这篇文章https://segmentfault.com/a/1190000013144617

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值