模式一:Cache Aside Pattern(先更新数据在更新缓存): 加载(Load):应用程序从缓存读取数据,如果缓存不存在,则从数据库中把数据加载到缓存。 更新(Update):当数据发生变化时,应用程序负责更新数据库,并清除或更新相应的缓存项。这保持了缓存中的数据与数据库的一致性。 优点:简单、易于理解和实现。缓存中的数据是惰...
为了解决缓存与数据库一致性的问题,针对不同的业务需求和场景,常见的几种策略如下: 1、Cache-Aside模式(先更DB再删缓存) 这种策略是在每次读取数据时,缓存首先尝试从缓存中获取数据,如果不存在则从数据库中加载并添加到缓存中。这种方式可以保证缓存和数据库中的数据一致性,并且不会降低写入性能,但会影响读取性能,...
模式三:Cache Back Pattern (先更新缓存再更新数据库) 加载(Load):应用程序通过缓存接口请求数据,缓存负责检查是否有缓存命中。如果缓存未命中,缓存会从数据库中加载数据并返回给应用程序。 更新(Update):当数据需要更新时,应用程序负责将更新发送到缓存,缓存负责将更新异步地传递给数据库,以保持数据的一致性。 优点:...
先删除缓存,后更新数据库,再删除缓存 这个方案其实跟前面的方案差不多,因为还是会出现前面方案提到的脏数据问题——在更新数据库成功后和删除缓存成功前读到的都是旧数据,不过能规避第二步删除缓存失败的问题,因为该方案是先删除缓存再更新数据库。只有在第一步和第二步之间又有查询请求,把旧的数据重新加载到缓存...
缓存一致性:在数据更新时,同步更新缓存。这可以通过以下方式实现: 写入时更新缓存:在数据写入数据库后,立即更新缓存。 使用消息队列:通过消息队列异步更新缓存,当数据库更新后,发送一个消息到消息队列,然后由消费者更新缓存。 缓存失效:在数据更新后,使缓存失效,迫使下次读取时从数据库中获取最新数据。
2. 缓存的使用策略 2.1 Cache-Aside (旁路缓存) 2.2 Read-Through(直读) 2.3 Write-Through (同步直写) 2.4 Write-Behind 3. 旁路缓存下的一致性问题分析 3.1 先更新缓存,再更新数据库 3.2 先更新数据库,再更新缓存 3.3 先删缓存,再更新数据库
小结:由于延迟时间难以确认,同时无法绝对保障数据的一致性,该方案一般不会使用。方案3:异步监听binlog删除 + 重试 核心流程:更新数据库监听binlog删除缓存缓存删除失败则通过MQ不断重试,直至删除成功 整体流程图如下:该方案是当前的主流方案,整体上没太大的问题,但是极端场景下可能还是有一些小问题。存在的问题...
写缓存 写缓存的流程就比较简单,先更新数据库中的数据,然后删除旧的缓存即可。Cache-Aside Pattern 一致性问题场景分析 实际的项目中运用最多的为Cache-Aside Pattern(旁路缓存)模式,在此策略下客户端先读取缓存,如果命中则返回,如果没有命中,则查询数据库并发数据写入缓存,由于数据库和缓存都需要进行修改,在高...
缓存一致性 每次逢年过节的时候抢票非常艰难,放票的时候那么多人同时去抢票,如果所有人查询、购票等都去访问数据库,那数据库的压力得有多大,这时候很多都会引入缓存, 把车票信息放入缓存,这样可以减少数据库压力。当乘客购买成功之后,数据库发生了变化,需要及时更新缓存中的数据,以便于其他乘客能从缓存中及时获取最新...
2. 缓存缓存是一种临时存储技术,其目的是为了提高数据访问速度。缓存通常存储在内存中,这样可以实现比从磁盘读取数据更快的访问速度。缓存的典型应用场景包括网页缓存、数据库查询缓存、CDN 等。二、缓存与数据库数据一致性问题缓存与数据库数据一致性问题的本质是,在缓存和数据库之间,数据可能因为各种原因出现不一致...