当前位置:网站首页>缓存3种方式及原理
缓存3种方式及原理
2022-06-22 17:33:00 【秋叶华】
Cache aside
系统常用方式旁路缓存
- 查询缓存服务存在则返回,不存在查询数据库
- 数据库存在更新缓存,返回数据,不存在更新缓存为null(有效期),防止缓存穿透
- 更新数据库后,更新\删除缓存

应用场景:
- 适用于查询频繁的业务场景(配置信息,登录用户信息...)
优点:缓存未命中查询数据库,属于懒加载模式(Lazy Loading)
缺点:
1.未命中时,操作流程复杂,查缓存,查数据库,更新缓存
2.数据更新频繁时,缓存更新频繁,缓存作用降低
3.容易导致数据不一致,产生脏数据
Cache aside 缓存4种更新方式
第一种先更新缓存,再更新数据库;
第二种先删除缓存,再更新数据库;
第三种先更新数据库;在更新缓存;
第四种先更新数据库;在删除缓存;
四种更新缓存导致不一致概率如下:
(缓存更新延迟 远低于 数据库更新)
第一种 > 第二种 > 第三种 > 第四种
建议应用系统使用第三种,第四种作为缓存更新方式,如果对数据一致性要求比较严格,
建议采用第4种(优化更新数据库后,立马删除缓存,然后再停顿几秒在删除一次)
Cache aside 缓存模式下 缓存击穿,缓存穿透,缓存雪崩解决
缓存击穿:
查询缓存没有,数据库有;大量并发查询情况下,导致数据库压力增加,导致系统不可用
解决方案:
缓存预热;查询数据库时对key加互斥锁;缓存不设置有效期(不建议)
缓存穿透:
查询缓存没有,数据库也没有;大量并发情况下,导致数据库压力增加,导致系统不可用
解决方案:
对查询数据校验;布隆过滤(布谷鸟过滤);查询数据库时对key加互斥锁,数据库不存在时,更新缓存为null并设置几秒的有效期;
缓存雪崩
查询缓存时,出现大量的数据过期,查询大量打到数据库,导致数据库压力增加,导致系统不可用
解决方案:
给缓存有效期增加一个随机的时间;热点数据不设置有效期;热点数据分散不同服务器
Read/Write through
缓存使用说明
将缓存作为主要的数据源,而数据库对于应用程序是透明的,读取、更新数据库任务都交给缓存来代理

应用场景
查询多,更新少,数据一致性高场景
优点:数据一致性高,查询快
缺点:对于频繁写入的场景,造成延迟,性能降低
Write behind
缓存使用方式
将缓存作为可靠的数据源,每次都只写入缓存;数据库操作采用异步的方式

应用场景
写多,读少的应用场景(库存,预下单)
优点:异步更新数据库,降低数据库压力;抗并发能力强,完全依赖缓存
缺点:容易数据不一致,数据缺失风险
边栏推荐
- At 19:30 today, the science popularization leader said that he would take you to explore how AI can stimulate human creativity
- Which securities company is better to open an account when making an appointment to play new bonds? It is safer to open an account
- 如何在 FlowUs和Notion 等笔记软件中进行任务管理?
- 预约打新债哪个券商公司开户好,开账户是更安全呢
- Robotframework installation tutorial
- 預訓練語言模型,bert,RoFormer-Sim又稱SimBERTv2
- Redis中的布隆过滤器与布谷鸟过滤器,你了解多少?
- When do project managers particularly want to escape from work?
- 2022 Chongqing preschool education industry exhibition 𞓜 hi tech Toy Puzzle decompression Toy Expo
- [learn shell programming easily]-4. The difference between single quotation marks and double quotation marks, the operation of integer values, the definition of arrays in the shell and the detailed us
猜你喜欢

面试MySQL

2022年T电梯修理复训题库及答案

Live streaming: dongyuhui is so popular. Is there anyone watching liuzhenhong?

<JVM上篇:内存与垃圾回收篇>08-对象实例化及直接内存

Redis中的布隆过滤器与布谷鸟过滤器,你了解多少?

SystemVerilog (12) - $unit declaration space

阿里云过户找不到账号安全组ID问题
Oracle中dbms_output.put_line的用法实例

How much do you know about the bloom filter and cuckoo filter in redis?

RSPS2022 Finalist | Dr. Yang Bai 简介
随机推荐
Linked list 4- 21 merge two ordered linked lists
exness整理马斯克收购推特需要解决三个问题
知乎热问:一个程序员的水平能差到什么程度?
自定义数据库连接池类: 要求:封闭一个Collection对象的集合类
Custom database connection pool class: requirement: enclose the collection class of a collection object
大一女生废话编程爆火!懂不懂编程的看完都拴Q了
< JVM part I: memory and garbage collection part > 08 object instantiation and direct memory
JVM快速入门
PostgreSQL reconfigure from library
牛客网:最小覆盖子串
Live broadcast Preview - 12 first-class Chinese scholars open ICLR 2022
问下 cdc 2.2.1监控sqlServer是不支持监控多库的吗?
如何持续突破性能表现? | DX研发模式
Robotframework installation tutorial
Beijing restorer's half moon: how to rekindle the fireworks in store management
不断重修的计划与变化
今天19:30 | 科普大佬说,带大家探寻AI如何激发人类的创造力
Complete the sqlsession interface and implementation classes
ADAU1452开发系统界面与代码数据之间的关系
传统图像--LBP特征