
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存在程序员学习软件开发的时候是会经常用到的一个功能设计,而今天我们就通过案例分析来了解一下,微服务缓存读写策略都有哪些类型。
引入Cache之后,我们继续来看看操作缓存会发生什么。因为存在存取速度的差异「而且差异很大」,从而在操作数据时,延迟或程序失败等都会导致缓存和实际存储层数据不一致。
我们就以标准的Cache+DB来看看读写策略和应用场景。
CacheAside
先来考虑一种简单的业务场景,比如用户表:userId:用户id,phone:用户电话token,avtoar:用户头像url,缓存中我们用phone作为key存储用户头像。当用户修改头像url该如何做?
更新DB数据,再更新Cache数据
更新DB数据,再删除Cache数据
先变更数据库和变更缓存是两个独立的操作,而我们并没有对操作做任何的并发控制。那么当两个线程并发更新它们的时候,就会因为写入顺序的不同造成数据不一致。
所以更好的方案是2:
更新数据时不更新缓存,而是直接删除缓存
后续的请求发现缓存缺失,回去查询DB,并将结果loadcache
这个策略就是我们使用缓存常见的策略:CacheAside。这个策略数据以数据库中的数据为准,缓存中的数据是按需加载的,分为读策略和写策略。
但是可见的问题也就出现了:频繁的读写操作会导致Cache反复地替换,缓存命中率降低。当然如果在业务中对命中率有监控报警时,可以考虑以下方案:
更新数据时同时更新缓存,但是在更新缓存前加一个分布式锁。这样同一时间只有一个线程操作缓存,解决了并发问题。同时在后续读请求中时读到新的缓存,解决了不一致的问题。
更新数据时同时更新缓存,但是给缓存一个较短的TTL。
当然除了这个策略,在计算机体系还有其他几种的缓存策略,它们也有各自适用的使用场景。
希望这辈子,最让你无悔的事情就是来达内学习!学习向来不是件易事,但无论过程多么艰难,希望你依然热爱生活,热爱学习!永远记得,达内将与你一同前行!现在扫码,立即领取万元课程礼包,助力0基础快速入行,为你梳理行业必备技能,全方位了解岗位发展前景!
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。