Bootstrap

Redis的缓存穿透、缓存击穿、缓存雪崩

目录

一、缓存穿透

1.什么是缓存穿透

2.常见的缓存穿透情况

3.缓存穿透会带来的问题 

4.解决缓存穿透问题可以采取的方法 

5.总结

二、缓存击穿

1.什么是缓存击穿

2. 常见的缓存击穿情况

3. 缓存击穿会带来的问题

4. 解决缓存击穿问题可以采取的方法 

5.总结

三、缓存雪崩

1.什么是缓存雪崩

2.常见的缓存雪崩情况

3. 缓存雪崩会带来的问题

4. 解决缓存雪崩问题可以采取的方法

5.总结

四、Redis问题小结

1.共同点:

2.解决方法:


一、缓存穿透

1.什么是缓存穿透

缓存穿透是指在使用缓存系统时,特定的查询在缓存和数据库中都找不到结果,导致每次查询都要访问数据库,从而增加数据库的压力,降低系统的性能。

当一个查询请求经过缓存系统时,缓存先检查是否有缓存的结果,如果有则直接返回给客户端,如果没有则查询数据库并将结果存入缓存后返回。但是,如果查询的数据在数据库中不存在,那么每次查询都会通过缓存系统直接访问数据库,导致数据库无效查询增加,浪费了系统资源。

2.常见的缓存穿透情况

  1. 查询不存在的数据:当用户查询一个不存在的数据,例如某个不存在的用户ID,由于缓存中没有缓存该数据,每次查询都会失败并直接访问数据库。

  2. 恶意查询:如果攻击者故意发送大量不存在的请求,试图绕过缓存,并导致大量无效的数据库查询请求。

3.缓存穿透会带来的问题 

  1. 增加数据库负载:由于缓存穿透导致大量无效的数据库查询操作,增加了数据库的负载,可能导致数据库性能下降。

  2. 击穿缓存:如果缓存中缓存了查询结果为空的键,恶意攻击者可以通过大量请求这些不存在的键,使缓存中的该键过期,从而导致后续请求都直接访问数据库,形成缓存击穿

4.解决缓存穿透问题可以采取的方法 

  1. 布隆过滤器(Bloom Filter):在查询前先通过布隆过滤器快速判断查询的数据是否存在,若不存在则不再访问缓存和数据库,减轻数据库压力。

  2. 空结果缓存:在缓存中存储空结果的键,可以避免缓存穿透,防止恶意攻击。

  3. 延迟双写:在查询到数据库不存在该数据时,在缓存中也写入一个空结果的占位符,设置较短的过期时间,以防止并发大量请求穿透缓存直接访问数据库。

  4. 异步更新缓存:当发现缓存和数据库中都不存在某个查询结果时,可以使用异步更新缓存的方式,先返回空结果给用户,然后通过后台任务去查询数据库并更新缓存,提高查询的响应速度和系统的并发能力。

5.总结

 综上所述,缓存穿透是一种常见的缓存问题,采取适当的预防措施可以避免对数据库造成不必要的压力,并提高系统的性能和稳定性。

二、缓存击穿

1.什么是缓存击穿

缓存击穿是指在使用缓存系统时,一个热门的、经常被访问的数据缓存过期或失效时,大量并发请求同时涌入,直接访问数据库,导致数据库负载剧增,造成系统性能

;