V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yodhcn
V2EX  ›  Redis

Redis 服务挂了,一段时间后又恢复,不会造成缓存与数据库不一致吗?

  •  
  •   yodhcn ·
    yodhcn · 2023-10-21 11:27:12 +08:00 via Android · 2137 次点击
    这是一个创建于 427 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Redis 服务挂了,一段时间后又恢复,如果这段时间能内,有修改数据库的操作,不会造成缓存与数据库不一致吗?

    如果是 Redis 主从集群,能避免这种情况吗?集群全挂了呢?


    注:目前解决缓存与数据库一致所使用的方案,是双写方案,写操作-先写数据库再删缓存,读操作-有缓存就读缓存,无缓存就读数据库后重建缓存

    但这种方案的问题是,缓存服务挂了后,在写操作时无法删掉过期缓存,最后等缓存服务恢复,读操作读到的就是过期数据


    请老哥们指点一下,
    难道因为缓存服务挂掉,就拒绝一切写操作吗?
    11 条回复    2023-10-22 16:21:02 +08:00
    justthewayyouare
        1
    justthewayyouare  
       2023-10-21 11:50:35 +08:00 via iPhone
    不用 redis 就行了。
    calmzhu
        2
    calmzhu  
       2023-10-21 11:53:52 +08:00
    加个监控啊,挂了恢复前清下缓存。
    crysislinux
        3
    crysislinux  
       2023-10-21 12:34:53 +08:00 via Android
    集群挂了还说啥,站点就 down 呗。用 Redis 集群的站 Redis 挂了基本也没法儿提供服务了
    devopsdogdog
        4
    devopsdogdog  
       2023-10-21 18:49:29 +08:00 via Android
    好好想想缓存是不是这样用,你都写 mysql 了,redis 不写就好了,只靠读的时候缓存一下。

    缓存数据一般不用于这种需要强一致性的。
    HuLiY
        5
    HuLiY  
       2023-10-21 19:26:22 +08:00
    双写方案,写操作-先写数据库再删缓存,读操作-有缓存就读缓存[并设置一个合适的过期时间],无缓存就读数据库后重建缓存
    👆就可以了。
    过期时间最好是随机的,避免缓存雪崩。
    这种方案一般用于一致性要求低的场景。
    HuLiY
        6
    HuLiY  
       2023-10-21 19:27:24 +08:00
    -----------上一条写错了----------------
    双写方案,写操作-先写数据库再删缓存,读操作-有缓存就读缓存,无缓存就读数据库后重建缓存[并设置一个合适的过期时间]
    👆就可以了。
    过期时间最好是随机的,避免缓存雪崩。
    这种方案一般用于一致性要求低的场景。
    EarthChild
        7
    EarthChild  
       2023-10-21 20:11:45 +08:00
    那就做个标识啊,redis 读/写不成就做个标识,等读出来了,这个标识为 true ,就清空 redis 缓存,每次读/写 redis 前都判断一下这个标识都行了。
    kuituosi
        8
    kuituosi  
       2023-10-22 09:33:37 +08:00
    严格来说就没有方法保证一致性,不管是双写还是集群。
    对一致性要求高就不要缓存,普通的情况把过期时间设置足够短就可以
    julyclyde
        9
    julyclyde  
       2023-10-22 13:10:11 +08:00
    再恢复的时候它应该是空白的,然后逐渐被双读操作给填充出来
    而不是持有死之前那一份数据
    hangszhang
        10
    hangszhang  
       2023-10-22 14:56:22 +08:00
    试试 binlog 同步到 redis 的方案
    9c04C5dO01Sw5DNL
        11
    9c04C5dO01Sw5DNL  
       2023-10-22 16:21:02 +08:00
    这种场景可以在恢复后先清空缓存,清空后再给应用使用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2205 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 01:43 · PVG 09:43 · LAX 17:43 · JFK 20:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.