一、缓存穿透
1.什么是缓存穿透
缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库,从而增加数据库的压力,降低系统的性能。
2.缓存穿透解决方案:
缓存空对象:在缓存中存储null的键,设置较短的过期时间,可以避免短时间的缓存穿透,防止恶意攻击 。
布隆过滤器:在查询前先通过布隆过滤器快速判断查询的数据是否存在,若不存在则不再访问缓存和数据库,减轻数据库压力。
二、缓存雪崩
1.什么是缓存雪崩
缓存雪崩是指在同一时段大量缓存同时失效或过期或者Redis服务宕机,导致大量请求打到数据库,给数据库带来巨大压力,从而引发数据库性能下降,甚至系统崩溃。
2.缓存雪崩解决方案
设置随机过期时间:为了避免大量缓存同时失效,可以为不同的缓存设置稍有差异的过期时间,分散同一时段缓存过期的可能性。
二级缓存机制:使用多级缓存,将数据同时存储到多个缓存层,一级缓存失效时可以从二级缓存中获取数据,避免所有缓存同时失效。
缓存预热:在系统低峰期,提前加载热门的缓存数据,避免在高峰期同时加载大量缓存数据。
三、缓存击穿
1.什么是缓存击穿
缓存击穿是指在使用缓存系统时,一个高并发、经常被访问的数据缓存过期或失效时,大量并发请求同时涌入,直接访问数据库,导致数据库负载剧增,造成系统性能下降甚至崩溃的情况。
2.缓存击穿解决方案
加互斥锁机制:在缓存失效时,只允许一个请求访问数据库,并将结果缓存,其他请求等待并从缓存中获取数据。
逻辑过期异步更新缓存:当某个热点数据的逻辑时间过期时,可以使用异步任务来更新缓存,先返回旧的缓存结果给请求,然后在后台异步更新缓存。
评论区