redis 缓存雪崩、穿透、击穿
1. redis简介:
开源的、高性能的非关系型数据库。
2.缓存雪崩:
大量的redis缓存key同一时间失效,导致大量访问请求直接打到数据库,造成数据库挂掉。
解决方案:
1.随机初始化缓存失效时间,不要让大量缓存在同一时间失效。
2.将热点key分配到不同的redis节点上。
3.设置定时任务,在缓存失效时将数据重新刷进去。
3.缓存穿透
一般是指redis和数据中都没有这样的数据,大量请求穿透redis直接怼到数据库,导致数据库挂掉。一般是黑客恶意攻击
解决方案:
1、使用布隆过滤器,这个是比较好的方法。内部维护一系列合法有效的KEY,迅速判断请求的合法性,对于不合法的请求,直接返回。
2、将第一次请求数据库查询结果写入Redis,这样能避免同一个key反复调用,但不能避免不同的非法KEY调用。
4.缓存击穿
访问某个热点数据时,数据放进缓存,正常情况下,由redis返回结果。但当key突然失效时,大量的访问请求击穿Redis,直接怼到数据库。
解决方案:使用分布式锁。 在请求数据库时上锁,只有一个线程能抢到这个锁,也就是说只有一个线程能访问数据库,其它没有抢到锁的线程先睡几秒。当那个抢到锁的线程拿到数据后,将数据写到redis里面。其余线程睡醒了,再去访问redis,里面就有数据了。