缓存常用的三种读写策略==》Cache Aside Pattern(旁路缓存模式)

本文介绍了CacheAsidePattern,一种服务端同时维护数据库和缓存的策略。在写操作中,先更新数据库,再删除缓存;读操作时,先尝试从缓存读取,若未命中则从数据库读取并回填缓存。该模式存在首次请求数据不一致和频繁写操作导致缓存命中率下降的问题。为解决这些问题,提出了预加载热点数据和使用分布式锁确保数据强一致性的方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cache Aside Pattern(旁路缓存模式)

Cache Aside Pattern 中服务端需要同时维系 DB 和 cache,并且是以 DB 的结果为准。

下面我们来看一下这个策略模式下的缓存读写步骤。

  • 先更新 DB

  • 然后直接删除 cache 。

简单画了一张图帮助大家理解写的步骤。

 

:

  • 从 cache 中读取数据,读取到就直接返回

  • cache中读取不到的话,就从 DB 中读取数据返回

  • 再把数据放到 cache 中。

Cache Aside Pattern 有一定的缺陷:

缺陷1:首次请求数据一定不在 cache 的问题

解决办法:可以将热点数据可以提前放入cache 中。

缺陷2:写操作比较频繁的话导致cache中的数据会被频繁被删除,这样会影响缓存命中率 。

解决办法:

  • 数据库和缓存数据强一致场景 :更新DB的时候同样更新cache,不过我们需要加一个锁/分布式锁来保证更新cache的时候不存在线程安全问题。

  • 可以短暂地允许数据库和缓存数据不一致的场景 :更新DB的时候同样更新cache,但是给缓存加一个比较短的过期时间,这样的话就可以保证即使数据不一致的话影响也比较小。

有以下两个问题:

在写数据的时候可以先删除Cache,再更改db吗?       

解答:当然不可以,会造成数据不一致,比如请求1要写入A数据,在请求1删除了Cache后,请求2要读A数据,然后请求1在请求2读完数据后才写入A数据,这样请求2读到的数据其实是旧数据,造成数据不一致。

在写数据的过程中,先更新DB,后删除cache就没有问题吗?

​​​​​​​解答:理论上来说还是可能会出现数据不一致性的问题,不过概率非常小,因为缓存的写入速度是比数据库的写入速度快很多!比如说,A数据不在Cache中,请求1从数据库中读完A数据后,请求2写入A数据并且删除了Cache中的A数据,然后请求1把读到的旧的A数据写入Cache,造成数据不一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值