redis的雪崩
例如在双11期间,大量内容从存放在redis进行缓存,但存放在redis的内容有过期时间,到过期时间后,缓存内的大量数据失效,大量请求进入到数据库,导致数据库相应不及时,发生雪崩。
解决方案:
设置缓存的失效时间,不让缓存都在同一时间失效,在使用缓存同时初始化缓存
对redis进行集群部署,把热点缓存分别均匀放到不同节点上
redis的击穿
当缓存中其中一个热点数据突然失效时,多个对此热点数据的请求到达数据库 ,导致数据库响应不及时
解决方案:
使用分布式锁,当大量请求访问数据库时,只有一个请求可以抢到锁,当一个请求从数据库找到数据,再将热点数据写入缓存,其他请求在睡眠后再进入redis中查询就可找到数据。
redis的穿透
例如当有人想对网站进行恶意攻击时,因为数据库主键是从0递增的,当有请求的参数小于0,那请求在redis缓存中查找不到,请求进入数据库查询,大量非法请求到达数据库,使其崩溃。
解决方案:
若请求为非法,将非法请求设为空也放入缓存中
对参数合法性校验,不合法就return