1.redis雪崩
redis雪崩是指由于大量的redis缓存在同一时间失效,导致所有的请求都被发送到数据库中,从而造成数据库崩溃。
解决redis雪崩我认为可以有以下几个办法:
1.不设置redis缓存的生效时间,那么redis就不会失效(不好)
2.使redis缓存的生效时间都不同,就不会发生大量请求同时被发送到数据库的情况
3.利用定时器不断刷新,每当缓存失效事件到后就重新设置生效时间
2.redis击穿
redis击穿与雪崩比较类似,但不同的是redis击穿是大量的请求去访问一个热点的key,当该key突然失效时这些请求就会击穿该key,直接传入数据库,导致数据库对某些请求的响应不及时导致崩溃
解决方案是:
1.在redis失效,请求传入数据库的过程中加上锁,限制只能有一个请求访问数据库获取数据,这样第一个进入数据库的请求就会把从数据库获取到的数据存入redis中,使其他的请求可以从redis中获取数据
2.让redis永久生效(不好)
3.redis穿透
是指有恶意数据访问redis,既不满足reids的访问要求又不满足数据库的访问要求
解决方案:
1.第一次有恶意数据访问时,无论在数据库中是否查询到数据,都会返回一个值存在redis中,从而下次再有恶意数据访问时就会直接访问redis而不是数据库
2.在访问redis前就增加一个判断,如果不满足访问条件就直接返回一个提示信息