美文网首页
(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)

    一、先删缓存,再更新数据库(用得少) 双删三次操作不能保证原子性,所以很少用 1、普通不一致原因: (1)A写,删...

  • 库存是先删缓存还是先改db

    库存是先删缓存还是先改db 先改db再淘汰缓存 缓存失效 A读db数据是旧值 B改数据并淘汰缓存 A写入旧值到缓存...

  • 缓存与数据库一致性问题

    问题: 应用中用redis或者memcached等DB缓存方案,当更新数据时,是先更新数据库后失效缓存,还是先失效...

  • 数据库-缓存数据一致性问题

    一、问题描述: 当使用DB + cache的架构时,会出现是先更新cache,还是先更新DB的问题。 1.先更新c...

  • 你知道怎么解决DB读写分离,导致数据不一致问题吗?

    目录 前言 先更新数据库,再更新缓存 先更新缓存,再更新数据库 先删除缓存,再更新数据库 先更新数据库,再删除缓存...

  • 缓存⼀致性问题2

    先更新数据库,再删除缓存 如果反过来操作,先更新数据库,再删除缓存呢?这个就更明显的问题了,更新数据库成功,如果删...

  • 先更新缓存还是先更新数据库

    项目中缓存基本上成为了标配,本地缓存也好、内存数据库缓存也好,只要用了缓存就会涉及数据一致性的问题,这个一致性指的...

  • 先更新缓存还是先更新数据库

    一、提前阅读 讨论这个问题之前可以先看下缓存模式(Cache Aside、Read Through、Write T...

  • 缓存一致性问题

    1. 先删缓存,再更新数据库 对于保持缓存与数据库的数据一致性,有一种常见的解决方法就是先删除缓存,再更新数据库。...

  • 缓存问题

    一、缓存更新策略 一般情况来说,缓存更新策略有三种: 先删除缓存,后更新数据库 先更新数据库,后更新缓存 先更新数...

网友评论

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

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