缓存击穿:高并发时,当一个key非常热点(类似于爆款)【冷门的key设置了过期时间】,在不停的扛着大并发,当这个key失效的瞬间,持续的大并发就穿破缓存,直接请求数据库并设置到缓存中,导致性能下降。
解决方案:
1数据永不过期(可以写一个算法修改过期时间)
2加锁排队(加同步锁和双重检查锁)
缓存雪崩:缓存集中过期,或者缓存服务器宕机,导致大量请求访问数据库,造成数据库压力瞬间过大,宕机。
解决方案:
1加锁排队
2加上随机失效时间
3对redis做高可用(针对缓存服务器宕机)
缓存穿透:大量请求的数据在缓存不存在,数据库也不存在,导致每次请求都会取查询数据库。这时的用户很可能是攻击者,如发起id为“-1”的数据或id特别大。
解决方案:
1采用参数校验(id校验)
2缓存空对象(不管有没有数据都缓存key到redis并设置一个失效时间)
3设置布隆过滤器(把一些用户请求的不存在的id放到布隆过滤器当中,请求的时候先来到布隆过滤器,如果当前请求的用户id比如说是-1,现在布隆过滤器查找如果没有再去数据库查找,如果数据库也没有就缓存一个空的到布隆过滤器里,下次用户再找布隆过滤器就直接返回空-黑名单方式/数据库有的数据放到布隆过滤器-白名单)
网友评论