首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    此时,就需要我们不断的进行优化,一种常用的优化手段就是引入缓存。而引入缓存后,我们在向数据库插入数据时,到底是先更新数据库还是先更新缓存呢?...但是在后续更新数据的操作中,是更新数据库,接下来更新缓存还是删除缓存?又或者是先删除缓存,再更新数据库缓存更新策略 从理论上来说,给缓存设置过期时间,其实是一种最终一致性的表现。...(1) 线程A更新数据库 (2) 线程B更新数据库 (3) 线程B更新缓存 (4) 线程A更新缓存 此时就会出现数据库中的数据与缓存的数据不一致的情况,这是因为线程A先更新数据库,可能因为网络等异常情况...,线程B更新数据库进而更新缓存,当线程B更新缓存后,线程A才更新缓存,这就导致了数据库数据与缓存数据的不一致。...先删除缓存更新数据库 先删除缓存更新数据库的方案也存在着线程安全的问题,例如,线程A更新缓存,同时,线程B读取缓存的数据。可能会出现下面的执行顺序。

    1.3K10

    ​到底是先更新数据库还是先更新缓存

    此时,就需要我们不断的进行优化,一种常用的优化手段就是引入缓存。而引入缓存后,我们在向数据库插入数据时,到底是先更新数据库还是先更新缓存呢?...但是在后续更新数据的操作中,是更新数据库,接下来更新缓存还是删除缓存?又或者是先删除缓存,再更新数据库缓存更新策略 从理论上来说,给缓存设置过期时间,其实是一中最终一致性的表现。...(1) 线程A更新数据库 (2) 线程B更新数据库 (3) 线程B更新缓存 (4) 线程A更新缓存 此时就会出现数据库中的数据与缓存的数据不一致的情况,这是因为线程A先更新数据库,可能因为网络等异常情况...,线程B更新数据库进而更新缓存,当线程B更新缓存后,线程A才更新缓存,这就导致了数据库数据与缓存数据的不一致。...先删除缓存更新数据库 先删除缓存更新数据库的方案也存在着线程安全的问题,例如,线程A更新缓存,同时,线程B读取缓存的数据。可能会出现下面的执行顺序。

    2.1K20

    谈谈缓存更新

    看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。...试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新数据库。...更新:先把数据存到数据库中,成功后,再让缓存失效。 注意,我们的更新是先更新数据库,成功后,让缓存失效。那么,这种方式是否可以没有文章前面提到过的那个问题呢?我们可以脑补一下。...为什么不是写完数据库更新缓存?...Write Back套路,一句说就是,在更新数据的时候,只更新缓存,不更新数据库,而我们的缓存会异步地批量更新数据库

    1.1K20

    高并发场景下,到底先更新缓存还是先更新数据库

    踩坑一:先更新数据库,再更新缓存 如果同时有两个写请求需要更新数据,每个写请求都先更新数据库更新缓存,在并发场景可能会出现数据不一致的情况。 ?...先更新数据库,再更新缓存 如上图的执行过程: (1)写请求1更新数据库,将 age 字段更新为18; (2)写请求2更新数据库,将 age 字段更新为20; (3)写请求2更新缓存缓存 age 设置为...踩坑二:先删缓存,再更新数据库 如果写请求的处理流程是先删缓存更新数据库,在一个读请求和一个写请求并发场景下可能会出现数据不一致情况。 ?...先删缓存,再更新数据库 如上图的执行过程: (1)写请求删除缓存数据; (2)读请求查询缓存未击中(Hit Miss),紧接着查询数据库,将返回的数据回写到缓存中; (3)写请求更新数据库。...先更新数据库,再删除缓存 如上图的执行过程: (1)读请求先查询缓存缓存未击中,查询数据库返回数据; (2)写请求更新数据库,删除缓存; (3)读请求回写缓存; 整个流程操作下来发现数据库age为20

    4.2K21

    高并发场景下,到底先更新缓存还是先更新数据库

    踩坑一:先更新数据库,再更新缓存 如果同时有两个写请求需要更新数据,每个写请求都先更新数据库更新缓存,在并发场景可能会出现数据不一致的情况。...先更新数据库,再更新缓存 如上图的执行过程: (1)写请求1更新数据库,将 age 字段更新为18; (2)写请求2更新数据库,将 age 字段更新为20; (3)写请求2更新缓存缓存 age 设置为...踩坑二:先删缓存,再更新数据库 如果写请求的处理流程是先删缓存更新数据库,在一个读请求和一个写请求并发场景下可能会出现数据不一致情况。...先删缓存,再更新数据库 如上图的执行过程: (1)写请求删除缓存数据; (2)读请求查询缓存未击中(Hit Miss),紧接着查询数据库,将返回的数据回写到缓存中; (3)写请求更新数据库。...先更新数据库,再删除缓存 如上图的执行过程: (1)读请求先查询缓存缓存未击中,查询数据库返回数据; (2)写请求更新数据库,删除缓存; (3)读请求回写缓存; 整个流程操作下来发现数据库age为20

    58450

    高并发场景下,到底先更新缓存还是先更新数据库

    踩坑一:先更新数据库,再更新缓存 如果同时有两个写请求需要更新数据,每个写请求都先更新数据库更新缓存,在并发场景可能会出现数据不一致的情况。 ?...先更新数据库,再更新缓存 如上图的执行过程: (1)写请求1更新数据库,将 age 字段更新为18; (2)写请求2更新数据库,将 age 字段更新为20; (3)写请求2更新缓存缓存 age 设置为...踩坑二:先删缓存,再更新数据库 如果写请求的处理流程是先删缓存更新数据库,在一个读请求和一个写请求并发场景下可能会出现数据不一致情况。 ?...先删缓存,再更新数据库 如上图的执行过程: (1)写请求删除缓存数据; (2)读请求查询缓存未击中(Hit Miss),紧接着查询数据库,将返回的数据回写到缓存中; (3)写请求更新数据库。...先更新数据库,再删除缓存 如上图的执行过程: (1)读请求先查询缓存缓存未击中,查询数据库返回数据; (2)写请求更新数据库,删除缓存; (3)读请求回写缓存; 整个流程操作下来发现数据库age为20

    70320

    58一面:Redis数据更新,是先更新数据库还是先更新缓存

    5、redis作为高速缓存数据库的数据一致性的问题,如果数据更新的话是先更新数据库还是先更新缓存?若果先更新数据库更新缓存会涉及什么问题 基础部分: 1、hashMap底层?...---- redis作为高速缓存数据库的数据一致性的问题,如果数据更新的话是先更新数据库还是先更新缓存?...但是在更新缓存方面,对于更新数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。...在这里,我们讨论三种更新策略: 先更新数据库,再更新缓存 先删除缓存,再更新数据库更新数据库,再删除缓存 应该没人问我,为什么没有先更新缓存,再更新数据库这种策略。...接下来讨论的就是争议最大的,先删缓存,再更新数据库。还是先更新数据库,再删缓存的问题。 (2)先删缓存,再更新数据库 该方案会导致不一致的原因是。

    1.6K40

    缓存雪崩、缓存穿透、缓存预热、缓存更新缓存降级等问题!

    ,今天给大家整理一篇关于Redis经常被问到的问题:缓存雪崩、缓存穿透、缓存预热、缓存更新缓存降级等概念的入门及简单解决方案。...一、缓存雪崩 缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库...(2)还有一个解决办法解决方案是:给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存,实例伪代码如下: ?...这样,当缓存标记key过期后,实际缓存还能把旧数据返回给调用端,直到另外的线程在后台更新完成后,才会返回新缓存。...:比如可用率低于90%,或者数据库连接池被打爆了,或者访问量突然猛增到系统能承受的最大阀值,此时可以根据情况自动降级或者人工降级; (4)严重错误:比如因为特殊原因数据错误了,此时需要紧急人工降级。

    3.8K10

    漫谈缓存更新之道

    许多人在更新缓存时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载入缓存中。 然而,这个逻辑是错误的!!!...试想,两个并发操作,一个更新,一个查询,更新删除缓存后,查询没有命中缓存,先把旧数据读出来后放到缓存中,然后更新操作更新数据库。于是,在缓存中的数据还是旧数据,导致缓存中持续地产生脏数据....这里,我们先不讨论更新缓存更新数据这两个事是一个事务的事,或是会有失败的可能,我们先假设更新数据库更新缓存都可以成功的情况 更新缓存的的Design Pattern有四种 1 Cache Aside...,成功后,让缓存失效 一个查询操作,一个更新操作的并发 首先,没有了删除cache数据的操作,而是先更新数据库中的数据,此时,缓存依然有效,所以,并发的查询操作拿的是没有更新的数据,但是,更新操作马上让缓存的失效了...如果命中了缓存,则更新缓存,然后再由Cache自己更新数据库(这是一个同步操作) 下图中的Memory可以理解为就是我们例子里的数据库 [nsgif3y2bb.png] A write-through

    3.2K31

    缓存更新的套路

    看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。...试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新数据库。...更新:先把数据存到数据库中,成功后,再让缓存失效。 ? 注意,我们的更新是先更新数据库,成功后,让缓存失效。那么,这种方式是否可以没有文章前面提到过的那个问题呢?我们可以脑补一下。...为什么不是写完数据库更新缓存?...Write Back套路,一句说就是,在更新数据的时候,只更新缓存,不更新数据库,而我们的缓存会异步地批量更新数据库

    2.2K70

    缓存更新的套路

    看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。...试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新数据库。...更新:先把数据存到数据库中,成功后,再让缓存失效。 ? ? 注意,我们的更新是先更新数据库,成功后,让缓存失效。那么,这种方式是否可以没有文章前面提到过的那个问题呢?我们可以脑补一下。...为什么不是写完数据库更新缓存?...Write Back套路,一句说就是,在更新数据的时候,只更新缓存,不更新数据库,而我们的缓存会异步地批量更新数据库

    1.3K130

    缓存更新的套路

    然而,这个是逻辑是错误的。 试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新数据库。...这里,我们先不讨论更新缓存更新数据这两个事是不是一个事务的事,或是会有失败的可能,我们先假设更新数据库更新缓存都可以成功的情况(我们先把成功的代码逻辑先写对)。...更新:先把数据存到数据库中,成功后,再让缓存失效。 ? 注意,我们的更新是先更新数据库,成功后,让缓存失效。那么,这种方式是否可以避免文章前面提到过的那个问题呢?...首先,没有了删除 cache 数据的操作了,而是先更新数据库中的数据,此时,缓存依然有效,所以,并发的查询操作拿的是没有更新的数据,但是,更新操作马上让缓存的数据失效了,后续的查询操作再把数据从数据库中拉出来...Write Back 套路,一句说就是,在更新数据的时候,只更新缓存,不更新数据库,而我们的缓存会异步地批量更新数据库

    1.3K20

    缓存更新策略

    问题:项目中,Redis用了缓存热点数据,持久化数据在MySQL DB中;那么Redis缓存数据什么时候更新呢? 方法A: 步骤:1....删除缓存,2.更新DB , 3.下一次读操作没有命中缓存时,更新缓存; 存在的问题:如果另外一个读任务发生在"更新DB"之前,那么缓存就"更新DB"之前的“脏数据”; 方法B:...步骤:1.更新DB,2.更新缓存; 存在的问题:如果发生并发“更新数据”,程序不能保证“更新缓存”的先后顺序,存在“脏数据”的可能性; 方法C:...步骤:1.更新DB, 2....下一次读操作没有命中缓存时,更新缓存; 存在的问题:如果在步骤1“更新DB”之前,有一个并发读任务没有命中缓存,从DB读取到“老数据”,在步骤2之后才把“老数据”更新缓存,那么缓存中就是

    1.5K00

    Redis缓存雪崩、缓存穿透、缓存预热、缓存更新缓存降级等问题

    一、缓存雪崩 由于原有缓存失效,新缓存未到期间,比如我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期,所有原本应该访 问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,...这样就导致用户查询的时候,在 缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。...用户直接查询事先被预热的缓存数据 解决办法 (1)直接写个缓存刷新页面,上线时手工操作下; (2)数据量不大,可以在项目启动的时候自动进行加载; (3)定时刷新缓存; 四、缓存更新 除了缓存服务器自带的缓存失效策略之外...,过期的话就去底层系统得到新数 据并更新缓存。...:比如可用率低于90%,或者数据库连接池被打爆了,或者访问量突然猛增到系统能承受的 最大阀值,此时可以根据情况自动降级或者人工降级; (4)严重错误:比如因为特殊原因数据错误了,此时需要紧急人工降级。

    2.2K20

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券