美文网首页
(10)先删缓存,还是先更新DB?(2)

(10)先删缓存,还是先更新DB?(2)

作者: hedgehog1112 | 来源:发表于2020-11-06 10:23 被阅读0次

    一、先删缓存,再更新数据库(用得少)

    双删三次操作不能保证原子性,所以很少用

    1、普通不一致原因:

    (1)A写,删缓存

    (2)B查,缓存不在

    (3)B去DB查询得旧值

    (4)B将旧值写缓存(如果不用过期策略,永远脏)

    (5)A新值写DB

    解决1:延时双删策略,可将1秒内缓存脏数据,再次删除

    2、mysql读写分离不一致:

    (1)A写,删缓存

    (2)B查询缓存,空

    (3)B去从库查,未完成主从同步,查到旧值

    (4)B将旧值写入缓存

    (5)主从同步,从库变为新值

    用双删延时策略,睡眠时间加几百ms

    1)用这种同步淘汰策略,吞吐量降低怎么办?

    第二次异步删除。不用沉睡,再返回。加大吞吐量。

    2)第二次删除,如果删除失败怎么办?

    看第(3)种更新策略的解析。

    二、先更新数据库,再删缓存(用得多)

    并发问题:(1)缓存刚好失效

                    (2)A查询得旧值

                    (3)B新值写入db

                    (4)B删除缓存

                    (5)A将查的旧值写入缓存

    这一情形很难出现:产生脏数据,先天性条件(3)比(2)耗时更短,才让(4)先于(5)

    有强迫症,一定要解决怎么办?

    先给缓存设有效时间,策略1异步延时删除策略,保证读完再删除(4.5颠倒)

    三、删缓存失败怎么办

    下面方案更好

    https://www.cnblogs.com/rjzheng/p/9041659.html#!comments

    相关文章

      网友评论

          本文标题:(10)先删缓存,还是先更新DB?(2)

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