缓存是计算机系统中应用非常广泛的技术,最经典的,操作系统中处处是缓存,缓存可以大大提升数据访问速率。
在业务中,数据库(MySQL
)面对大量的并发请求,会出现两个问题:
为解决这两个问题,一般会在内存中设置缓存,通常是使用Redis
作为缓存,对于数据库的查询请求首先查询缓存,如果查不到,再去查询数据库。
引入缓存之后又会面临三个新的问题,即缓存击穿、缓存穿透以及缓存雪崩。
当缓存中没有某个数据,但是数据库中有这个数据时,对于数据的访问会直接访问数据库,于是——
一个热点key
每时每刻都在接受大量的并发访问,当这个热点key
的缓存过期时,大量的并发请求同时涌入到数据库中,导致后端数据库的压力陡然增大,引发缓存击穿
。
概括来讲,就是由于缓存key
过期,导致大量请求涌入后端数据库而造成数据库压力骤然增大。
key
的过期导致的,那么一种方法是设置热点key
永不过期。缓存穿透指查询缓存未命中,同时后端数据库中也没有这个数据,那么Mysql就只能返回一个空对象,表示此次查询失败。如果这样的请求非常多,又或者有攻击者恶意地持续不断发出这样的查询请求,会给后端数据库带来很大的压力甚至崩溃,这就是缓存穿透
。
缓存雪崩是指为一批缓存key
设置了相同的过期时间,那么当这个过期时间到达时,这些缓存key
同时失效,从而导致大量的访问涌入后端数据库,造成后端数据库压力陡然增大,形成缓存雪崩
。
有两种情况会造成缓存雪崩
:
key
同时过期解决大批key
同时过期:
key
同时过期,也不会造成缓存雪崩
.缓存雪崩
解决缓存系统宕机问题:
版权声明: 如无特别声明,本文版权归 月梦の技术博客 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:《 缓存击穿、缓存穿透与缓存雪崩 》
本文链接:https://ymiir.netlify.app//%E5%88%86%E5%B8%83%E5%BC%8F%E7%BC%93%E5%AD%98/threecacheproblem.html
本文最后一次更新为 天前,文章中的某些内容可能已过时!