企业官方网站怎么申请,商务网站开发流程,四网一体网站建设方案,西安网站建设公司哪家好Cache Aside Pattern#xff08;旁路缓存模式#xff09;
Cache Aside Pattern 中服务端需要同时维系 DB 和 cache#xff0c;并且是以 DB 的结果为准。
下面我们来看一下这个策略模式下的缓存读写步骤。
写 #xff1a; 先更新 DB 然后直接删除 cache 。
简单画了一…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造成数据不一致。