美文网首页码农的世界开发经验随笔
先更新缓存还是先更新数据库

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

作者: 山东大葱哥 | 来源:发表于2019-09-15 08:54 被阅读0次

项目中缓存基本上成为了标配,本地缓存也好、内存数据库缓存也好,只要用了缓存就会涉及数据一致性的问题,这个一致性指的时换错和关系型数据库中数据的一致性,如何保证换错与数据库信你的数据一致呢,很多同学会说在对缓存数据修改时要同步修改两处地方(缓存、数据库)不就可以了吗?

但真能做到同步吗?不可能,不管如何实现他都是有先后顺序的,嘛呢时先更新缓存呢还是先更新数据库呢?

先更新缓存,这样可以保证换错信你数据都是最新的,但这样做有一定风险,就是缓存更新完成,再更新数据库时发现异常,导致回滚数据库没更新,这就出现了数据不一致的情况,有的同学就说了回滚时把缓存清空不就可以吗?

是可以,但在这个时间间隔内就产生了数据不一致的情况,如果恰巧有用户访问了换错,就会读取到脏数据。

那么我们先更新数据库后更新缓存不就行了吗。这种方式是不是就解决了不一致的问题呢?答案是没有。

因为你在提交数据库到成功准备更新缓存的这个时刻还是存在短暂的不一致性。放跑如果你的业务对数据一致性要求不高,那没问题,可以使用这种方案。

如果业务对一致性要求极高,那就需要进一步优化为,数据库事务提交前清空缓存中的对应数据,事务提交成功后再更新缓存数据库为新数据。这一时刻如果请求读取缓存发现没有数据,于是进行数据库查询,而数据库此时有事务更新对应有锁,所以新请求会阻塞等到事务执行成功,然后就可以读取到新数据了,读取新数据后放入缓存中,这样缓存和数据库也就一致了,这样也就保证了数据得一致性,但是是通过牺牲了可用性来换取的。

相关文章

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

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

  • 缓存问题

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

  • 缓存读写策略 - Cache Aside

    场景描述 比如一条数据同时存在数据库、缓存,现在你要更新此数据,你会怎么更新? 先更新数据库?还是先更新缓存? 其...

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

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

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

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

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

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

  • 缓存⼀致性问题4

    为什么是删除,⽽不是更新缓存? 我们以先更新数据库,再删除缓存来举例。 如果是更新的话,那就是先更新数据库,再更新...

  • cache aside pattern(缓存+数据库读写)

    最经典的缓存+数据库读写的模式 1.为甚要先删除缓存再更新数据? 2.要是先更新缓存,要是更新数据库失败怎么办? ...

  • 缓存⼀致性问题2

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

  • 如何保证Redis与数据库的双写一致性

    1、先更新数据库,再通过订阅binlog异步更新缓存场景:数据实时性要求不是特别高 2、先更新数据库,再删除缓存场...

网友评论

    本文标题:先更新缓存还是先更新数据库

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