redis缓存穿透、击穿、雪崩

缓存穿透、击穿、雪崩

原文:https://mp.weixin.qq.com/s/_sqGyTvMphOLPpbSCLh0Yw

总结,请求绕过redis,直接作用到mysql上

雪崩:key大面积失效(定时任务刷新缓存,key的过期时间相同,某个时间点全部失效)

解决方案:失效时间都加个随机值避免同一时间大面积失效

场景:app首页数据,所有首页的Key失效时间都是12小时,中午12点刷新的,我零点有个秒杀活动大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住
穿透:用户恶意使用不存在的key,则请求会到达数据库(如果这个用户并发一直请求就会。。)

解决方案:代码层做好数据效验

场景:使用不存在的用户id,如-1,请求接口
击穿:一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库

解决:将key设置成永不过期,或者自动续期

 分布式锁(官方推荐redisson)

maven

<!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.12.5</version>
</dependency>

springboot项目

<!-- https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter -->
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.12.5</version>
</dependency>

猜你喜欢

转载自www.cnblogs.com/javalbb/p/12825449.html