redis缓存穿透雪崩击穿
缓存雪崩:redis缓存大量key在同一时间失效,导致大量请求打回到数据库(mysql),造成数据库挂掉。
解决
1.不要设置大量key在同一时间失效
2.快失效时使用定时器再写入redis
3.随机初始化失效时间
4.redis集群,让热点key平均地分布到不同的redis节点上
缓存穿透:redis和数据库都没有该数据,比如用户请求id=-1的数据(常见于黑客恶意大量攻击),redis没找到数据便会向数据库请求,这种数据相当于直接穿透redis。
解决
1.无论数据库查询的值是否为空,都缓存到redis,这样下一次再用同一个参数请求就不会穿透redis
2.把用户ip拉黑
3.检验请求的合法性
4.布隆过滤器(请求数据库前筛选,如果布隆判断请求的数据不在数据库,直接pass)
缓存击穿:redis中存在非常热点的key,当这个缓存key突然失效,大量的请求打回到数据库中
解决
1.设置该key不失效
2.分布式锁(在redis和数据库间设置一个锁,抢到锁的线程就去数据库查数据再写入到redis,其他线程在redis找到数据就不会去抢分布式锁了)