1. 什么是缓存穿透 ? 怎么解决 ?
缓存穿透是指查询一条数据库和缓存都没有的一条数据,这种请求会穿透缓存直接到数据库进行查询, 就会一直查询数据库,对数据库的访问压力就会增大 。它通常发生在一些恶意用户可能故意发起不存在的请求,试图让系统陷入这种情况,以耗尽数据库连接资源或者造成性能问题。
有以下2种解决方案 :
- 缓存空对象:代码维护较简单,但是效果不好。
- 布隆过滤器:代码维护复杂,效果很好
2.什么是缓存击穿 ? 怎么解决 ?
缓存击穿发生在访问热点数据,大量请求访问同一个热点数据,当热点数据失效后(一般是缓存时间到期)同
时去请求数据库,瞬间耗尽数据库资源,导致数据库无法使用。
比如某手机新品发布,当缓存失效时有大量并发到来导致同时去访问数据库。
解决方案 :
1.热点数据提前预热,提前预热就是提前写入缓存。
2.设置热点数据永远不过期。
3.加锁 , 限流
3.什么是缓存雪崩 ? 怎么解决 ?
缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。造成这种现象的 原因是,key的过期时间都设置成一样了。
比如对某信息设置缓存过期时间为30分钟,在大量请求同时查询该类信息时,此时就会有大量的同类信息存在相同的过期时间,一旦失效将同时失效,造成雪崩问题。
解决方案是:
key的过期时间引入随机因素
4.补充一点
- 缓存击穿:是单个热点 key的失效问题。比如某爆款商品缓存过期,大量并发请求同时发现缓存没数据,一起涌去查数据库,像 “单点爆破”。
- 缓存雪崩:是大量 key 集体失效。比如很多缓存 key 过期时间设成一样,到点同时失效,无数请求瞬间全打数据库,像 “全面崩塌”。