美文网首页
2.2 Redis的集群/哨兵以及雪崩击穿问题

2.2 Redis的集群/哨兵以及雪崩击穿问题

作者: MelodyOf流沙 | 来源:发表于2021-03-16 14:07 被阅读0次

    集群

    不能保障数据的强一致性、异步复制

    哨兵

    • 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
    • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
    • 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会进行选举,将其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

    缓存击穿

    • 使用redis的悲观锁setnx(添加过期时间)进行处理
    • zookeeper解决

    缓存雪崩

    • 设置过期时间加一个随机数

    缓存穿透

    • 使用布隆过滤器,对数据库没有的数据直接返回0

    Mysql和Redis数据不一致问题

    数据不一致问题无法完全避免,除非使用悲观锁进行序列化,但这样只会让吞吐量降低。因为我们在做数据修改时,为了做到不让用户读到脏数据,所以我们都是常规的先删除缓存,后修改数据库的方案,但此方案存在问题。

    1. A线程删除缓存
    2. B线程读取缓存为null,读取数据库,并添加到缓存中
    3. A线程修改DB数据完成
    4. B线程用户此时读取到的数据就是脏数据
      处理方案:延时双删
    • redis.del(key)
    • db.update()
    • thread.sleep(‘系统从db读取一次数据并添加到缓存的大概时间’)
    • redis.del(key)
      这样处理后,能最大程度的尽量避免数据不一致问题

    相关文章

      网友评论

          本文标题:2.2 Redis的集群/哨兵以及雪崩击穿问题

          本文链接:https://www.haomeiwen.com/subject/zqgrcltx.html