redis的缓存雪崩、缓存穿透和缓存击穿
程序员文章站
2022-08-20 11:58:08
缓存雪崩: 比如给缓存中的key设置了统一的过期时间,而在过期时间点,有大量的请求进来,这个时候redis中没有用户请求的资源,所以所有的请求会全部拥到数据库,如果数据库有报警监测的话,可能会报一下警,然后数据库就挂掉了。如果这时候把数据重新起来,redis上还是没有缓存这些内容,数据库还是会被再一 ......
缓存雪崩:
比如给缓存中的key设置了统一的过期时间,而在过期时间点,有大量的请求进来,这个时候redis中没有用户请求的资源,所以所有的请求会全部拥到数据库,如果数据库有报警监测的话,可能会报一下警,然后数据库就挂掉了。如果这时候把数据重新起来,redis上还是没有缓存这些内容,数据库还是会被再一次击垮。
解决方法:
给key的过期时间设置一个随机值,让key的过期时间不集中到一块。这样即使有过期的,这样的压力,一般的redis集群都能扛下来。
缓存击穿:
某个key比较热点,当有大量的用户访问时,如果这个key在这期间失效的话,会造成缓存击穿。
解决方法:
可以设置热点数据和首页数据不过期,如果主页数据有更新的话,可以从数据库刷新缓存
缓存穿透:
缓存穿透就是用户访问的数据在缓存中和数据库中都不存在。数据库的id都是从1自增加的,如果用户用户访问一个id为-1的数据或者id特别大的数据,缓存中和数据库中找不到这个数据,就会造成缓存穿透
解决办法:
在接口层进行数据校验,如果id<=0或者参数不合法,直接拦截。或者如果这个数据找不到的话,可以给这个key的value设置为null或者可以根据需要返回一个小可爱,您迷路了。
注:
① redis可以做高可用、集群、哨兵加主从,可以避免全盘崩溃
② redis可以做持久化rdb+aof,一旦重启,可以自动从磁盘上加载数据,快速恢复缓存数据
③ 服务降级,进行数据限流(通过限流组件:这样用户可能单次访问不到页面,但是多刷几次就出来了) ,这样可以避免数据库被直接打死
推荐阅读
-
利用php实现禁用IE和火狐的缓存问题
-
Android 获得本应用的缓存和清除缓存的代码实例
-
JAVAEE——宜立方商城06:Redis安装、数据类型和持久化方案、Redis集群分析与搭建、实现缓存和同步
-
SpringCloud+Eureka+Feign+Ribbon的简化搭建流程,加入熔断,网关和Redis缓存[2]
-
应用中引入缓存层后,缓存和持久化层数据一致性的思考
-
SpringBoot使用Redis缓存的实现方法
-
使用Redis和Java进行数据库缓存
-
Redis之缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
-
laravel使用Redis实现网站缓存读取的方法详解
-
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!