redis缓存雪崩
redis雪崩是指redis在某个时间大量的key失效,突然造成数据库访问压力增大,像雪崩一样。
redis雪崩危害巨大,可能会导致服务器宕机。
解决方案:
1:缓存失效时间为随机值。
2:根据不同类型的缓存,做好失效时间策略。
3:采取多级缓存。
Redis缓存穿透
缓存穿透,是指缓存和数据库中都没有的数据,用户不断发起请求,由于该数据不在缓存中,所以会一直访问数据库,造成数据库压力过大。
解决方案:
1:对于一些不合理的key,直接返回空。(例如查询是,id为负数的请求)
2:对于数据库为null的数据,也缓存起来。
Redis缓存击穿
缓存雪崩是大量的key,同一时间失效。缓存击穿则是某一个key在失效的一瞬间,大量的并发请求到达服务端,造成瞬间数据库压力过大:,如秒杀活动等。
解决方案:
1: 对于热点key,设置为永不过期。(会造成缓存中存在大量的key,而这些key的访问频率并不高,同时也要考虑缓存与数据库的同步问题)
2:使用分布式锁,保证同一时间只有一个线程去访问数据库,其他线程等待。(会降低服务器的相应时间,也可能存在死锁等风险)
总结
缓存存在的意义就是为了减轻数据库的查询压力,从而提高服务的QPS。而缓存的雪崩、穿透、击穿都是在缓存失效的时候出现的。所以对于缓存的时候,需要结合业务,来处理相关的情况。