阿里云国际版
帮助文档
注册阿里云
网站首页
最新活动
阿里云邮箱
等保测评
阿里云产品
企业上云最佳实践
技术帮助文档
关于我们
付费资讯
侧边菜单
阿里云服务器ECS
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新
[咨询更多]
阿里云存储OSS
简单易用、多重冗余、数据备份高可靠、多层次安全防护安全性更强、低成本
[咨询更多]
阿里云数据库RDS
稳定可靠、可弹性伸缩、更拥有容灾、备份、恢复、监控、迁移等方面的全套解决方案
[咨询更多]
阿里云安全产品
DDoS高防IP、web应用防火墙、安骑士、sll证书、态势感知众多阿里云安全产品热销中
[咨询更多]
阿里云折扣优惠
云服务器ECS、数据库、负载均衡等产品新购、续费、升级联系客服获取更多专属折扣
[咨询更多]
网站首页
»
关于我们
»
公司新闻
微信扫码 阿里云返佣 咨询
微信扫码 阿里云折扣 咨询
微信扫码 技术支持
电话:18580233332
QQ客服:32738651
电话:
18623333330
QQ客服:
2194888888
电话:18581111185
QQ客服:3388866681
缓存穿透、缓存击穿、缓存雪崩都是什么?怎么解决?
2020-9-16 点击量:
缓存穿透
正常的请求都是先请求到缓存(就当我们的缓存是Redis吧),如果缓存中存在数据,就直接返回,如果缓存中不存在请求的数据,就查询
数据库
,然后将查询到的数据再放到缓存中。
那么如果现在有一堆的请求,在缓存中没有,数据库中也没有,怎么办?这种垃圾请求还特别多,而且因为是在数据库没有查询到,所以也不会被放到缓存中,这就是缓存穿透的场景。
大量的这种请求,最终会导致数据库压力剧增,最终就会将数据打垮,若是这个数据库是核心数据库,那么其他所有依赖这个库的接口都会报错。
例如,每次请求的参数都是id,而id是我们数据库里的自增主键,但是请求过来的参数要么是-1这种,要么就是特别大的一个数,反正就是不存在的数据。
解决缓存穿透
那么如何解决缓存穿透呢?
首先最基本的就是要做参数校验,非法的参数就直接return,连缓存层都到不了。
当请求的数据在穿过Redis后,数据库也返回空,这样的数据也可以存入到缓存中,然后过期时间可以设置一个比较短的时间,这样能够在一定程度上保障后端数据库的安全。
可以使用Redis的布隆过滤器,这个工具可以有效的防止缓存穿透的发生,我们可以将一个参数是否存在保存为一个boolean值,然后需要一个bit就可以存储,这样的数据压缩到一个数据结构中,就是布隆过滤器的原理。即节省存储空间,又能达到效果。
缓存击穿
我们在Redis存储的数据,主要是缓存的效果,目的是为了解决DB的压力,所以一些热点数据,都是先从缓存中获取的,当缓存中不存在的时候再从DB中获取然后再存入缓存。
但是如果一个高频的热点数据,在失效的一瞬间,它的大量请求就会直接打到DB上,这样在DB还没有返回数据给Redis的时候,DB承受了热点请求的压力,就好像缓存是一个水桶,然后突然水桶破了一个洞,直接冲垮了后面的堤坝(DB)。
解决缓存击穿
造成缓存击穿的原因是,在同一时刻从数据库中获取了大量数据,并且设置了相同的过期时间,这些缓存就会在同一时刻失效,这样就造成了缓存击穿的问题。
解决方案
一些热点的数据,我们可以设置永不过期;或者是在访问数据的时候延长过期时间。
也可以用分布式锁,来锁住数据,保证同一时间只有一个线程能够获取数据,其他请求获取不到数据,只能等待,但是在高并发的场景下,这种方案,体验不太好,并且分布式锁的压力也会特别大。
缓存雪崩
Redis中存储了很多的数据,但是有时候这些数据会出现,在同一个时刻批量过期的情况,因为有可能这些数据是批量插入的,所以他们的过期时间就会都在同一个时间。
正好在这个批量数据过期的时间点,大量的请求过来了,因为缓存数据过期了,所以没有命中缓存,直接请求到了数据库中。数据库的压力突然剧增,甚至有可能直接撑不住挂掉。然后有可能DBA会紧急重启DB,但是刚一恢复,新的请求立马又把DB打垮了。
也有可能就是Redis挂了,缓存都不能用了,请求也是直接打到了DB上,然后DB也是扛不住压力,直接挂掉。再恢复,再挂掉。
Redis中同一时刻大量的Key过期,那一瞬间和Redis不存在一样,还有Redis真的挂了的情况,这对服务和DB来说是灾难性的问题。
解决缓存雪崩
解决方案
批量存入缓存的数据,我们可以为这些数据分别配置比较合理的过期时间,即使是随机分配过期时间也可以,避免同一时间失效。
热点数据永不过期,更新操作时直接更新缓存,但是并不设置过期时间。
当数据库缓存出问题时,可以采用降级措施,虽然是用DB顶上了请求,但是可以通过降级方案,保证某些数据在同一时刻只能有一个线程在查询数据库和写缓存,这样不至于把数据库给搞崩了。
还有就是为了防止Redis挂了,导致的缓存雪崩,可以保证Redis的高可用,就是将Redis集群部署,然后将热点数据都分配到不同的节点上,这样就可以有效的防止雪崩的出现。
上一篇: PaaS服务及其实现体系
下一篇: 使用阿里云OSS的服务端签名后直传功能
最热文章
更多
自动化部署的好处及它的优势特点有哪些
阿里云合作伙伴订单关联项目操作和规则
雪花服务器是什么
什么是镜像?常见的镜像文件格式
Bucket 是对象存储非常重要的概念
阿里云合作伙伴佣金政策和返点流程
推荐文章
更多
2022年双十一阿里云代理商返佣多少
阿里云渠道代理商返点流程
阿里云代理商最高返点多少,阿里云代理商返...
云代理商返点,阿里云代理商优惠购买流程
按量付费转包年包月时下单失败如何处理?包...
预留实例券可以同时抵扣多台实例吗
获取更多阿里云折扣 立即咨询
最新活动
更多
双十一无影云桌面价格:无影4C...
2022双十一阿里云服务器优惠...
2022阿里云双11活动开启:...
11月阿里云金秋云创季:云数据...
2022年阿里云双11金秋云创...
云服务器百亿补贴,云服务器低至...
相关关键字
更多
阿里云国际版
阿里云国际站优惠
阿里云国际站代理
安恒密盾
阿里云关联合作伙伴
小程序服务器
阿里云无影云电脑
阿里云代理商价格
重庆阿里云代理商
西安阿里云代理
云南阿里云代理
杭州阿里云代理商
成都阿里云代理商
阿里云三级等保
阿里云国际站代理商
阿里云新用户
阿里云微服务引擎
阿里云能耗宝
VMware服务
阿里云服务器收费
技术帮助文档
更多
阿里云云盾服务如何安装?云盾安装步骤
阿里云服务器远程登录不了怎么办
DDoS原生防护的工作原理、应用场景...
阿里云轻量应用服务器开放端口教程
高防服务器能防御哪些攻击
如何开通消息服务MNS
联系客服免费领取更多阿里云产品新购、续费升级折扣,叠加官网活动折上折更优惠
立即领取
抢折上折
优惠券领取
免费配置推荐
服务器一年49.68元
云数据库19.9元
云安全5折
短信0.033元/条
更多折扣
阿里云代理返佣
阿里云代理合作
微信扫码咨询
咨询热线
18580233332