什么是穿透
穿透是数据既不存在Redis中,也不存在数据库中。如果有人恶意攻击,频繁的查找不存在的数据。Redis就没有什么实质性的作用,会给数据库增加很大压力。
如何解决
1,对空值进行缓存;
2,使用布隆过滤;
3,设置黑名单;
4,进行实时监控;
什么是雪崩
大量数据同时到期,缓存中设置了大部分相同的过期时间,到了那一时刻,缓存数据批量过期。大量的请求会直接落在数据库上,造成缓存雪崩。
如何解决
1,设置生存时间随机数,给不同的Key的TTL添加随机值
2,添加锁机制(mysql中的同步锁,消序队列);(最好不要用,查询太慢)
什么是击穿
redis中的某个热点数据的key值过期,若这时发来了大量请求,压力会集中在数据库,严重可能会导致数据库宕机,发生一系列连锁反应。
如何解决
1,进行锁机制(mysql中的同步锁,消序队列);(最好不要用,查询太慢)
2,延长生存时间;
3,不设置生存时间;