共计 1441 个字符,预计需要花费 4 分钟才能阅读完成。
导读 | 在如今大数据的时代下,高并发高可用是所有软件开发都追求的目标,为了实现这一目标,缓存的使用是每一个高并发系统都会涉及到的,使用缓存可以保障系统的运行效率,提高系统的健壮性。 |
前言
在高并发的系统架构中,大量网络请求的并发处理,导致数据库的 I / O 消耗是非常巨大的,为了快速读取数据,减少网络请求时延,缓解数据库的压力,因此在软件开发中引入了缓存技术。但是在缓存的使用过程中也会遇到一些特殊情况导致缓存失效,常见的缓存失效的情况有三种:缓存穿透、缓存击穿、缓存雪崩。
缓存失效的三种情况
缓存(以 Redis 缓存为例)的引入可以减少请求数据库的次数,提高查询效率,从而提升系统性能。一般的流程是:应用发起请求后,先查询缓存中是否存在所需数据,如果缓存中存在,直接返回数据,如果缓存中不存在所需数据,则需要去查询数据库,如果数据库中存在所需数据,则一方面存入缓存,另一方面返回查询结果,如果数据库中不存在,则返回空或者错误。
缓存穿透
缓存穿透 (Cache Penetration) 是指查询一个一定不存在的数据,即用户访问的数据既不在缓存当中,也不在数据库中。由于缓存中查询不到数据,请求会去查询数据库,然而数据库中也不存在该数据,也不会写入缓存,导致查询该数据的时候,每次都要去数据库中查询,给数据库到来压力。
缓存雪崩
缓存雪崩 (Cache Avalanche) 是指大量的缓存数据在某一时刻超过了缓存的过期时间,同时失效,导致高并发的请求同时去访问数据库,造成数据库压力过大,导致系统崩溃。这是针对多个缓存数据而言的。
缓存击穿
缓存击穿 (Cache Breakdown) 是指缓存过期的一瞬间,有大量的请求去查询同一个缓存数据,由于该数据在承载着大并发,当该数据失效的一瞬间,持续的大并发就会直接去请求数据库,造成数据库压力倍增。这是针对一个缓存数据而言的。
解决方案
针对缓存穿透的解决方案
针对缓存雪崩的解决方案
针对缓存击穿的解决方案
正文完
星哥玩云-微信公众号