当前位置:网站首页>缓存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
缓存使用方式
将缓存作为可靠的数据源,每次都只写入缓存;数据库操作采用异步的方式

应用场景
写多,读少的应用场景(库存,预下单)
优点:异步更新数据库,降低数据库压力;抗并发能力强,完全依赖缓存
缺点:容易数据不一致,数据缺失风险
边栏推荐
- Azkaban startup error 2022/06/20 21:39:27.726 +0800 error [stdouterrredirect] [azkaban] exception in thread "m
- ADAU1452开发系统界面与代码数据之间的关系
- 各位大佬,第一次使用flink mysql cdc, 现在程序启动 没报错 新增数据没有打印出来
- Excuse me, when cdc2.0 reads mysql, there should be no table lock. An error was just reported, access D
- PLSQL variable assignment
- Jenkins容器安装ruby-runtime插件失败报错解决
- 2022年5月中国游戏厂商及应用出海 EMEA 地区收入30强
- 預訓練語言模型,bert,RoFormer-Sim又稱SimBERTv2
- Game NFT Market: opensea's most easily cut cake
- 大一女生废话编程爆火!懂不懂编程的看完都拴Q了
猜你喜欢

What happened to this page when sqlserver was saving

JVM quick start

postman学习

UE4_UE5制作3DUI-跟随相机朝向(附工程)

Pytorch——报错解决:“torch/optim/adamw.py” beta1, UnboundLocalError: local variable ‘beta1‘

阿里云过户找不到账号安全组ID问题
![Azkaban startup error 2022/06/20 21:39:27.726 +0800 error [stdouterrredirect] [azkaban] exception in thread](/img/02/2e402f05022b36dc48ff47232e8535.png)
Azkaban startup error 2022/06/20 21:39:27.726 +0800 error [stdouterrredirect] [azkaban] exception in thread "m

A course for New Oriental transformation bilingual live broadcast to bring goods to the project manager

Unity中通过射线躲避障碍物寻路的一些初步探索

@Lucky user of "Qilu Duojiao", Shandong 5A scenic spot calls you to visit the park for free!
随机推荐
【工具】pip和conda的相關使用
各位大佬,第一次使用flink mysql cdc, 现在程序启动 没报错 新增数据没有打印出来
Is it safe for Ping An Securities to open an account? What is its relationship with Ping An Bank?
c# sqlsugar,hisql,freesql orm框架全方位性能测试对比之sqlserver
When do project managers particularly want to escape from work?
預訓練語言模型,bert,RoFormer-Sim又稱SimBERTv2
wpa_cli参数说明
2022 Chongqing preschool education industry exhibition 𞓜 hi tech Toy Puzzle decompression Toy Expo
Grafana 9 正式发布,更易用,更酷炫了!
Nuxt - Universal (SSR / SSG) / single page app (rendering mode)
Sort---
Array implementation of circular linked list
Notes on new reports
2022年T电梯修理复训题库及答案
Robotframework installation tutorial
jsp连接MySQL总出错
Makefile将某一部分文件不编译
Jenkins installation and upgrade
Golang implements redis (10): local atomic transactions
Live broadcast Preview - 12 first-class Chinese scholars open ICLR 2022