Redis:缓存击穿,缓存穿透,缓存雪崩
缓存击穿:指缓存中没有但数据库中有的数据,当大量并发请求到达时,这些请求会穿透缓存直接打到数据库,可能会导致数据库压力剧增。
解决方法:设置热点数据永不过期,或者使用分布式锁确保只有一个线程去数据库查询数据并更新缓存。
缓存穿透:指查询不存在的数据,缓存中和数据库中都不存在该数据,导致请求直接打到数据库。
解决方法:可以使用布隆过滤器(Bloom Filter)预先检查请求的数据是否可能存在,不存在的话就直接拒绝请求,从而避免对数据库的查询压力。
缓存雪崩:指在某个时间段内,缓存中的大量数据同时过期,导致大量请求直接打到数据库。
解决方法:1. 设置缓存数据的过期时间时,采用随机过期时间避免集体过期。2. 实现缓存失效后,通过分布式锁或队列控制数据库写入操作的线程数量,防止数据库压力剧增。3. 实现缓存预加载机制,在系统运行前预先加载热点数据到缓存中。4. 监控缓存的健康状态,在出现问题时采取预警措施。
评论已关闭