帮助文档
关键词列表
网站地图
网站首页
最新活动
轻量应用服务器
阿里云邮箱
等保测评
阿里云产品
企业上云最佳实践
技术帮助文档
关于我们
网站首页
>
关于我们
>
公司新闻
>
缓存穿透、缓存击穿、缓存雪崩都是什么?怎么解决?
缓存穿透、缓存击穿、缓存雪崩都是什么?怎么解决?
发布时间: 2020-09-16 09:50:33
文章作者: 网站编辑
阅读量: 223
缓存穿透
正常的请求都是先请求到缓存(就当我们的缓存是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的服务端签名后直传功能
最热文章
阿里云企业邮箱怎么申请免费账号
夸克网盘和阿里云盘是一家吗?
钉钉里面的任务管家多少钱
夸克网盘怎么导入阿里云
夸克网盘转阿里云盘:轻松实现文件迁移
夸克网盘和阿里云盘有什么区别
随机推荐
无线局域网和有线局域网是什么
服务器代理商:高防云服务器代理
云服务器报价:阿里云服务器租赁一般多少钱
美国服务器租用需要做哪些安全配置
免备案高防cdn便宜
网络提示dns服务器未响应,怎么解决
获取更多阿里云折扣优惠 立即咨询
活动推荐
内容推荐
更多
遭遇CDN缓存攻击怎么办
云服务器缓存数据清理方法详解
云存储网关:怎么购买包年包月缓存盘
怎么清理云服务器缓存
文件网关的缓存有什么作用
关键词推荐
更多
自己搭建云服务器
虚拟主机数据库
钉钉服务商
阿里云折扣
云南阿里云代理
加密
商标注册服务费
网络安全产品
阿里云邮箱收费
钉钉打卡任意改位置
where在数据库中是什么意思啊
阿里云盘备份的照片怎么删除啊苹果手机
云虚拟主机远程连接失败怎么回事儿啊苹果13
数据库中如何建立索引
阿里云服务器设置登入地点在哪看
钉钉怎么拉人进入群聊
阿里邮箱如何将邮件分类管理出来保存文件夹
钉钉群会议怎么参加
钉钉怎么加入班级号入群申请信息
电脑钉钉怎么分享屏幕给好友
联系客服免费领取更多阿里云产品新购、续费升级折扣,叠加官网活动折上折更优惠
立即领取