穿透类缓存Cache使用,这一篇就够了!

有些成熟的技术方案,用不着创新,固化下来的模式(pattern),学就完了。例如,穿透类缓存的使用,“Cache Aside Pattern”就是很好的实践沉淀,故今天聊一聊Cache Aside Pattern
画外音:就好像“设计模式”,它就是沉淀下来的设计方法。
 
什么是“Cache Aside Pattern”?
旁路缓存方案的经验实践,这个实践又分读实践,写实践
画外音:与旁路缓存对应的,是穿透缓存。
 
读实践是怎么样的?
对于读请求:
(1)先读cache,再读db;
(2)如果,cache hit,则直接返回数据
(3)如果,cache miss,则访问db,并将数据set回缓存;
 
穿透类缓存Cache使用,这一篇就够了!
如上图:
(1)先从cache中尝试get数据,结果miss了;
(2)再从db中读取数据,从库,读写分离;
(3)最后把数据set回cache,方便下次读命中;
 
写实践是怎么样的?
对于写请求:
(1)淘汰缓存,而不是更新缓存;
(2)先操作数据库,再淘汰缓存;
 
穿透类缓存Cache使用,这一篇就够了!
如上图:
(1)第一步要操作数据库,第二步操作缓存;
(2)缓存,采用delete淘汰,而不是set更新;
Cache Aside Pattern为什么建议淘汰缓存,而不是更新缓存?
如果更新缓存,在并发写时,可能出现数据不一致
 
穿透类缓存Cache使用,这一篇就够了!
如上图所示,如果采用set缓存。
 
在1和2两个并发写发生时,由于无法保证时序,此时不管先操作缓存还是先操作数据库,都可能出现:
(1)请求1先操作数据库,请求2后操作数据库;
(2)请求2先set了缓存,请求1后set了缓存;
导致,数据库与缓存之间的数据不一致
 
所以,Cache Aside Pattern建议,delete缓存,而不是set缓存
 
Cache Aside Pattern为什么建议先操作数据库,再操作缓存?
如果先操作缓存,在读写并发时,可能出现数据不一致
 
 穿透类缓存Cache使用,这一篇就够了!
如上图所示,如果先操作缓存。
 
在1和2并发读写发生时,由于无法保证时序,可能出现:
(1)写请求淘汰了缓存;
(2)写请求操作了数据库(主从同步没有完成);
(3)读请求读了缓存(cache miss);
(4)读请求读了从库(读了一个旧数据);
(5)读请求set回缓存(set了一个旧数据);
(6)数据库主从同步完成;
导致,数据库与缓存的数据不一致
 
所以,Cache Aside Pattern建议,先操作数据库,再操作缓存
 
Cache Aside Pattern方案存在什么问题?
:如果先操作数据库,再淘汰缓存,在原子性被破坏时
(1)修改数据库成功了;
(2)淘汰缓存失败了;
导致,数据库与缓存的数据不一致
Cache Aside Pattern总结:
对于读请求:
(1)先读cache,再读db;
(2)如果,cache hit,则直接返回数据;
(3)如果,cache miss,则访问db,并将数据set回缓存;
 
对于写请求:
(1)淘汰缓存,而不是更新缓存;
(2)先操作数据库,再淘汰缓存;
 
任何技术方案的设计,都是折衷。
架构师之路-分享可落地的技术文章
相关文章
架构师之路,20年干货精选
 
希望大家有启示,求帮

发布者:糖太宗,转载请注明出处:https://www.qztxs.com/archives/science/technology/5819

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月10日 下午10:21
下一篇 2022年5月10日 下午10:21

相关推荐

  • 数美滑块验证码逆向分析

    最近因为要采小红书的数据,接触到了数美滑块验证码,所以就有了这篇文章来记录下分析过程。 本文数美滑块以数美官网为例,滑块链接地址:https://www.ishumei.com/trial/captcha.html。 数美滑块版本号:v1.0.3-153 一、请求分析 1.1 验证码申请 打开网站后通过抓包发现,第一步先是请求了https://captcha...

    2022年5月7日
    7600
  • 面试杀手锏:Redis源码之SDS(Redis 数据结构源码解析)

    1.前言 Hello,欢迎大家来到《 Redis 数据结构源码解析系列》,在《Redis为什么这么快?Redis底层实现原理》一文中我说过 ,Redis 速度快的一个原因就是其简单且高效的数据结构。(新手建议反复多推敲几遍) 2.SDS命令实战[初来乍到] SDS 是 Redis 中最简单的数据结构。Redis 中所有的数据结构都是以唯一的 key 字符串作...

    2022年5月19日
    3100
  • 用户中心,1亿数据,架构如何设计?

    本文较长,可提前收藏。 用户中心,几乎是所有互联网公司,必备的子系统。随着数据量不断增加,吞吐量不断增大,用户中心的架构,该如何演进呢。   什么是用户中心业务? 用户中心是一个通用业务,主要提供用户注册、登录、信息查询与修改的服务。 用户中心的数据结构是怎么样的? 用户中心的核心数据结构为: User(uid, login_name, passwd, se...

    2022年5月14日
    3300
  • 很多人问,到底要不要转管理?

    想要成为一名管理者,并不是做个决定这么简单,做管理需要一套完全不同的技能。好的架构师,好的技术专家,并不一定代表一个好的管理者。   如何确定自己是不是适合管理岗位呢?可以先问问自己下面五个问题。   问题1:你的兴趣在哪,技术专家,还是带团队? 有没有想过自己五年后在做什么,届时是否工作得开心?   做技术专家,带团队做事情,还是自己创业,搞清楚自己想要什...

    技术 2022年5月15日
    2400
  • 嘿,技术人,你开会的时间多,还是撸码的时间多?

    作为技术人的你,是不是苦于“被低效的会议占据了绝大部分时间”,而没有连续撸码的时间? 7项开会最佳实践,帮大家高效开会,安心撸码。 实践一:邀请正确的人。 人越少越高效,请务必提前确定人员范围,而不是发给一个部门。 实践二:提前发出邀请。 谁都不喜欢临时的会议,邀请务必明确主题,以及大致的流程。 实践三:准时开始。 准时是基本的职业素养。 实践四:好的开场是...

    2022年5月12日
    1700

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信