聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长
IT技术精华
设为首页
加入收藏
订阅本站
IT技术文章精选
2022
每日Shell
关于
热门搜索:
IT技术
Linux
算法
系统
架构
数据库
优化
python
分布式
php
您的位置:
首页
» 技术文章 » 正文
穿透类缓存Cache使用,这一篇就够了!
2021-12-24 02:12
浏览: 1929 次
我要评论
(0 条)
字号:
大
中
小
#缓存
3
个
#互联网
42
个
#架构
61
个
#微服务
15
个
有些成熟的技术方案,用不着创新,固化下来的模式
(pattern)
,学就完了。例如,穿透类缓存的使用,
“Cache Aside Pattern”
就是很好的实践沉淀,故今天聊一聊
Cache Aside Pattern
。
画外音:就好像“设计模式”,它就是沉淀下来的设计方法。
什么是“Cache Aside Pattern”?
旁路缓存
方案的经验实践,这个实践又分
读实践,写实践
。
画外音:与旁路缓存对应的,是穿透缓存。
读实践是怎么样的?
对于读请求:
(1)先读cache,再读db;
(2)如果,cache hit,则直接返回数据;
(3)如果,cache miss,则访问db,并将数据set回缓存;
如上图:
(1)先从cache中尝试get数据,结果miss了;
(2)再从db中读取数据,从库,读写分离;
(3)最后把数据set回cache,方便下次读命中;
写实践是怎么样的?
对于写请求:
(1)淘汰缓存,而不是更新缓存;
(2)先操作数据库,再淘汰缓存;
如上图:
(1)第一步要操作数据库,第二步操作缓存;
(2)缓存,采用delete淘汰,而不是set更新;
Cache Aside Pattern为什么建议淘汰缓存,而不是更新缓存?
如果更新缓存,
在并发写时,可能出现数据不一致
。
如上图所示,如果采用set缓存。
在1和2两个并发写发生时,由于无法保证时序,此时不管先操作缓存还是先操作数据库,都可能出现:
(1)请求1先操作数据库,请求2后操作数据库;
(2)请求2先set了缓存,请求1后set了缓存;
导致,
数据库与缓存之间的数据不一致
。
所以,Cache Aside Pattern建议,
delete缓存,而不是set缓存
。
Cache Aside Pattern为什么建议先操作数据库,再操作缓存?
如果先操作缓存,
在读写并发时,可能出现数据不一致
。
如上图所示,如果先操作缓存。
在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年干货精选
》
希望大家有启示,求帮
转
。
标签:
cache
知识来源:
mp.weixin.qq.com/s/?id=f211cbac1e2f0e55bae81372b4f0b7e5&source_url=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2Fd-896uLu-3Ax-AF6A6fEkg
本文链接:
穿透类缓存Cache使用,这一篇就够了!
打印
复制链接
上一篇:
流量超过谷歌的Tiktok,在扩张过程中被质疑“偷窃”OBS代码
下一篇:
功劳是下属的,锅是自己的,你碰到过这样的老板吗?
网友评论
已有
0
条评论,
我也要评论
发表评论
用户名:
*
电子邮箱:
*
(保密)
网站网址:
验证码:
申请头像
添加评论内容
Ctrl+Enter 快捷回复
为热爱学习的工程师每天更新最新最优质的技术文章。
➨GitHub:
https://github.com/taogogo
➨关注微博:
http://weibo.com/taogogo
随机推荐
云数据库行业动态@20211201
1.3 万亿条数据查询,如何做到毫秒级响应?
回溯算法理论基础!
推动AI产业升级,阿里灵杰AI工程化峰会即将启幕
架构师们,请收好这份多云架构指南
百位技术大咖带你玩转大前端|GMTC
如何构建智能湖仓架构?亚马逊工程师的代码实践来了 | Q推荐
不交“认知税”,混沌工程顶层设计正走向规范
流行20年的架构设计原则SOLID可能已经不适合微服务了
标签云
IT技术
Linux
算法
系统
架构
数据库
优化
python
分布式
php
opensource
App
数据
java
教程
Web开发
术→技巧
大数据
Linux & Unix
面试
Technical
程序设计
原创
机器学习
技术
docker
SQL Server
Javascript
程序开发
Cache
nginx
默认分类
Working case
..experience
编程
oracle
安全
杂项
Redis
web
网友评论已有0条评论, 我也要评论