栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Redis篇】什么是缓存雪崩、缓存穿透、缓存击穿?如何解决?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Redis篇】什么是缓存雪崩、缓存穿透、缓存击穿?如何解决?

目录

什么是缓存雪崩、缓存穿透、缓存击穿?如何解决?

1. 缓存雪崩

1. 概念2. 本质原因3. 解决方案

1. 防止缓存集中失效2. 保护数据库 2. 缓存穿透

1. 概念2. 本质原因3. 解决方案

1. 将空对象记录在缓存中2. 使用布隆过滤器 3. 缓存击穿

1. 概念2. 本质原因3. 解决方案

1. 过期时间长一点2. 保护数据库

什么是缓存雪崩、缓存穿透、缓存击穿?如何解决? 1. 缓存雪崩 1. 概念

指在某一个时间段,缓存集中过期失效。所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。

2. 本质原因

大量key同时过期

3. 解决方案 1. 防止缓存集中失效

过期时间+随机数:尽量让缓存失效的时间均匀分布,最次也得随机分布,尤其是一些访问大的接口。

2. 保护数据库

加锁或者队列:防止大量线程对数据库的一次性进行读写,避免缓存失效时对数据库造成的巨大冲击,但吞吐量就降低了。

2. 缓存穿透 1. 概念

指查询一个一定不存在的数据。由于缓存不命中,并且出于容错考虑,如果从数据库查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,缓存失去意义。

2. 本质原因

黑客攻击,查询数据库中不存在的数据

3. 解决方案 1. 将空对象记录在缓存中

如果数据库返回信息为null,也可以将这个空对象设置到缓存里边去。下次再请求的时候,就可以从缓 存里边获取了

注意:将空对象设置一个较短的过期时间(因为没有意义,存着就是为了防止黑客高频null攻击)

2. 使用布隆过滤器

关键字:bitmap数组、hash算法、误判率

详情见这篇文章:【Redis篇】什么是布隆过滤器?

3. 缓存击穿 1. 概念

缓存击穿指的是热点key在某个特殊的场景时间内恰好失效了,恰好有大量并发请求过来了,造成DB压力(屋漏偏逢连夜雨)

其实缓存击穿和缓存雪崩从概念上来讲差不多,只是缓存击穿是某些热点key,而雪崩指的是大规模的key。

2. 本质原因

热点key过期

3. 解决方案 1. 过期时间长一点

对于一些热点key,过期时间可以无限调长

2. 保护数据库

加锁或者队列的方式:和缓存雪崩处理方式意义

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号