Redis (三)雪崩和穿透
一、缓存和数据库间数据一致性问题
在高并发的场景下,无论是先删除缓存后更新数据库,还是先更新数据库还是删除缓存,都会出现不一致的问题,所以在强一致的业务上不建议使用缓存。
场景1:先删除缓存,再更新数据库
分析:并发不高时,如果删除缓存失败,那么后面就不会更新数据库,这种情况缓存和数据库是一致的。
如果删除缓存操作成功,更新数据库失败,那么后面业务查询缓存时,发现没有,就会查数据库并把数据缓存到Redis,这种情况缓存和数据库也是一致的。
当有上亿并发的时候,如果删除缓存后,又来了一个线程查询,这是还没更新到数据库,那么新线程会缓存就数据,最终导致缓存和数据库数据不一致问题。
场景2:先更新数据库,再删除缓存
分析:如果更新失败,那么业务不会继续删除缓存操作,缓存和数据库数据是一致的。
如果更新数据库成功,然后删除缓存失败,那么后面有线程来查询时,会出现缓存中是旧数据,出现数据不一致问题。
这个方案原则上不推荐,建议使用场景1的方案。
解决方案
针对场景1的解决方案:
1、把删除缓存和更新数据库作为一个原子操作,加更新锁。其他线程查询数据时,如果更新锁存在,则查询等待。
直到更新完成,再执行查询任务,这里要注意更新锁的超时释放问题,因为有可能更新操作异常,导致业务退出,或者jvm挂了,更新锁一直没释放。可以结合业务更新的时长,设置超时时间,自动释放锁,比如500ms,500ms正常更新操作会完成。
二、雪崩
雪崩是指缓存在同一时间大面积失效,从而导致业务去查数据库DB,导致数据库负载过高,可能造成数据库宕机。
解决方案:
1、对不同的key设置不同的过期时间(不规则的key)。
2、对于固定的热key,业务上使用定时器提前更新,如果是30分钟失效,那么每29分钟或者更短的时间定期刷新。
三、击穿
穿透是指业务查询一个不存在的数据,这样每次缓存都不能命中,而去查询数据库,导致数据库压力大。
解决方案:
1、业务代码上缓存一个空对象,并设置过期时间。
2、使用布隆过滤器
Redis (三)雪崩和穿透相关推荐
- Redis面试 - redis 的雪崩和穿透?
Redis面试 - redis 的雪崩和穿透? 面试题 了解什么是 redis 的雪崩和穿透?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实 ...
- redis缓存雪崩、穿透、击穿概念、布隆过滤器小结及解决办法
判存业务 redis缓存雪崩.穿透.击穿概念及解决办法 什么是 概念: 1.缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意 ...
- redis的雪崩、穿透、击穿解析
雪崩 redis中的key在某个时间段内,大量的失效,此时有大量请求查询这些key,那么这些请求就会去到后端数据库查询,后端数据库压力过大导致数据库宕机,最后系统崩溃.(雪崩的时候没有一片雪花是无辜的 ...
- 解决Redis缓存雪崩、穿透、并发、预热、击穿、热点Key等问题
一.缓存雪崩 数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机. 比如一个雪崩的简单过程: 1.redis集群大面积故障 2.缓 ...
- Redis缓存雪崩、穿透、击穿,布隆过滤器,分布式锁详解
缓存雪崩 在某一个时间存在大量的缓存key失效 解决办法 1.有效期一直---->给每一个数据加上水机有效期 2.redis挂掉了----->使用redis集群,分摊key的存储 引出re ...
- 【redis】redis的雪崩和穿透
1.什么是缓存穿透 一般的缓存系统,都是按照key值去缓存查询,如果不存在对应的value,就应该去DB中查找 .这个时候,如果请求的并发量很大,就会对后端的DB系统造成很大的压力.这就叫做缓存穿透. ...
- redis的雪崩和穿透
一. 缓存雪崩 缓存挂了以后,大量请求拖垮后面的数据库. 如何解决缓存雪崩? 1. 事前 redis高可用,主从+哨兵,rediscluster,避免全盘崩溃 2. 事中 本地ehcache缓存+hy ...
- redis 的雪崩和穿透
缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机.缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据 ...
- redis的雪崩 击穿 穿透以及解决方案
雪崩:众多缓存数据同一时间到期导致大量请求同时达到数据库,致使数据库超负荷. 解决方案: 1.数据对时间不敏感:到期时间加一个随机值 2.数据必须在某一时刻到期:客户端请求的时候加个延迟. 击穿:某一 ...
- redis 的雪崩和穿透?
https://blog.csdn.net/Aria_Miazzy/article/details/88066975 转载于:https://www.cnblogs.com/tonggc1668/p/ ...
最新文章
- linux路由内核实现分析 四,linux路由内核实现分析(二)---FIB相关数据结构(4)
- Centos 6.5 python 2.6.6 升级到 2.7
- HDU 1108.最小公倍数-辗转相除法
- flex 文字竖排_flex button字竖排展示
- Ubuntu中给eclipse和android studio添加桌面快捷图标
- 网络知识:说说我们常听说的网络攻击是怎么回事?
- Bootstrap3 缩写词样式
- NOIP2011题目简析
- OpenCV双边滤波解决实现图像的美白
- 哈理工OJ 1562 字符统计器(水模拟)
- hcna华为认证网络工程师
- 迅雷开放离线下载试用,每天8000名额,速度来抢!
- POJ 1265 Area (皮克公式+多边形面积)
- 我为什么觉得程序员是个高危职业
- react native使用echarts图表
- 第二届中国(泰州)国际装备高层次人才创新创业大赛
- [N1CTF 2022] solve_pow,baby_N1ES
- [electron]Electron安装报错connect ETIMEDOUT
- Create WAP Push SMS Messages
- PTA评测系统的常见问题
热门文章
- html 权限模块设置,角色权限设置.html
- 专访探真科技:云原生安全与业务迭代平衡术
- CRUD 还能这么玩?
- 三个锦囊:剖析 5G 安全难题
- 我,对安全研究专家下手的黑客!
- 阿里巴巴成立云原生技术委员会,云原生升级为阿里技术新战略!
- 潘石屹没跑,他去学 Python 了
- 真的,没人能逃开“真香定律”
- 程序员之痛:六次创业五回失败了
- iPhone、iPad明年或采用USB-C接口;虎牙回应央视点名网课内容充斥广告;Rust 1.44.0 发布| 极客头条...