缓存雪崩
缓存在同一个时间大批量的失效,请求都打到数据库上,导致数据库压力过大,甚至宕机。
解决方法:往 redis 存数据的时候,把每个 key 的失效时间加上个随机数。
缓存穿透
缓存穿透是指查询一个一定不存在的数据,缓存没有命中,需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询。
解决方法:
1.使用布隆过滤器不让这个请求到达数据库层。
2.从数据库查不到数据时,设置一个默认值存放到缓存,设置一个5分钟的过期时间。
缓存击穿
请求集中访问一个热点 key, 当这个 key 过期瞬间,大量请求全都打在数据库。
解决方法:
1.把这个热点 key 设置为永久有效
2.使用互斥锁