美文网首页
缓存数据一致性

缓存数据一致性

作者: 向上的萝卜白菜 | 来源:发表于2019-11-01 09:11 被阅读0次

  读数据的标准姿势:先查缓存,如果缓存中数据不存在时读数据库,然后再将数据写回缓存。

  相信这种读缓存方案争议较小,但是对于数据修改时缓存的处理,方案却有多种,需要依据具体的业务需求进行选择。

  方案一: 先删缓存再修改数据。

    这种方案是最不推荐的,主要是并发的时候缓存中更容易出现脏数据,让我们来分析一下,A修改数据时先删缓存,此时B需要读数据,会读数据库中的修改前的数据,会将数据写到缓存中,然后A修改数据库为新数据。这种场景更容易出现。

  方案二: 先修改数据再删缓存。

  这种方案再结合缓存设置一个较短的有效期,还是非常推荐的。这种方案发生问题的几率小,而且开发难度小、方案简单,所以最推荐。

  那么这个方案就不会出问题吗?让我们来分析一下: 假设缓存中没有数据,A读数据库中数据,B修改数据库中数据然后删除缓存,A因为各种原因处理慢,此时才开始将之前读的库中的数据写缓存,那么缓存中就是脏数据。通常情况下数据库读的速度要远大于写库的速度,所以发生的概率极低,再结合缓存有效期,即使发生了,一定时间后数据也会变成最终一致性。

  方案三: 读写缓存时加锁

  如果有业务方要求修改数据后需要实时生效,可以考虑此方案。读数据时当缓存中没有时,先加锁,读数据,写回缓存,解锁。修改数据时先加锁,修改数据,删除缓存,解锁。加锁的方式可以考虑redis、zk等。此方案严格保证数据一致性,但是引入了系统复杂度。

 

相关文章

  • 缓存

    1 缓存基础 1 缓存的读写模式 1.1 Cache Aside(旁路缓存) 适合场景数据一致性要求高,缓存数据更...

  • Redis基础--缓存问题3+1

    缓存穿透、缓存雪崩、缓存击穿缓存与数据库数据一致性 缓存穿透 大多数互联网应用,使用缓存的方式如下: 当业务系统发...

  • Java常用的后端性能优化六种方式:缓存化+服务化+异步化等

    01. 缓存化 缓存可以称的上是性能优化的利器,使用缓存时需要考虑缓存命中率、缓存更新、数据一致性、缓存穿透及雪崩...

  • 保证缓存和数据库一致性

    如何保证缓存和数据库数据一致性呢? 1 先删除缓存 再更新数据库 线程1删除缓存 线程2查询数据 缓存没有命中,...

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

    解决缓存与数据库的数据一致性问题 问题分析 多个写请求执行顺序不同导致脏数据 存在更新缓存请求和读缓存请求,读缓存...

  • 数据库与缓存数据一致性解决方案

    一、序言 在分布式并发系统中,数据库与缓存数据一致性是一项富有挑战性的技术难点。本文将讨论数据库与缓存数据一致性问...

  • 缓存一致性解决方案

    1.实时同步更新 特点:更新数据库的同时,更新缓存,使用缓存工具类或者AOP实现 优点:数据一致性强,不会出现缓存...

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

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

  • redis缓存一致性问题解决方案

    场景 我们在很多情况下会使用缓存提高查询效率,减小数据库压力。但是引入缓存后,就要面对如何保证缓存与DB数据一致性...

  • 缓存异常:如何解决缓存与数据库的一致性

    缓存和数据库的数据不一致的产生原因 数据一致性 缓存中有数据,那么,缓存中的数据值需要和数据库中的值相同 缓存中没...

网友评论

      本文标题:缓存数据一致性

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