快捷搜索:  汽车  科技

缓存穿透和缓存击穿有什么区别(什么是缓存穿透及解决方案)

缓存穿透和缓存击穿有什么区别(什么是缓存穿透及解决方案)当查询数据库时候如果没有查询到数据,则将 Null 数据返回给前端用户,同时将 Null 数据写入缓存,在对应 Key设置一定的过期时间。如图所示:Redis 缓存穿透解决方案流程这种方案在一定程度上可以减轻数据库被频繁查询压力。

在介绍缓存穿透之前,首先来看看Redis 缓存查询数据的大致流程。如图所示:

缓存穿透和缓存击穿有什么区别(什么是缓存穿透及解决方案)(1)

使用Redis 缓存查询数据的大致流程

从图可以看出,前端用户要访问获取数据时,后端首先会在Redis 缓存中查询,如果查询到数据,则将查询到的数据直接返回给用户,流程结束。如果缓存中没有查询到数据,则前往数据库中查询,此时如果能查询到数据,将数据返回给用户,同时写入缓存,流程结束。如果数据库中没有查询到数据,则返回Null,同时流程结束。

这个查询流程呢刚开始看倒没啥问题,但是仔细看最后一个步骤:当查询数据库时没有查询到数据,则返回 Null 给前端用户,流程结束。如果前端用户频繁发起访问请求,恶意请求数据库中不存在的 key ,则此时数据库中查询到的数据将永远为 Null ,由于 Null 的数据未存入缓存,故而每次请求都将访问数据库。如果此时有恶意的攻击,发起【洪流】式查询,很有可能会对数据库造成极大的压力,甚至【压垮】数据库,这个过程称之为缓存穿透,顾名思义,就像永远穿越过了缓存而直接访问数据库。

缓存穿透解决方案

当查询数据库时候如果没有查询到数据,则将 Null 数据返回给前端用户,同时将 Null 数据写入缓存,在对应 Key设置一定的过期时间。如图所示:

缓存穿透和缓存击穿有什么区别(什么是缓存穿透及解决方案)(2)

Redis 缓存穿透解决方案流程

这种方案在一定程度上可以减轻数据库被频繁查询压力。

猜您喜欢: