缓存穿透/击穿/雪崩

1.缓存处理流程。

​ 前台请求,后台先从缓存中取数据,取到之后直接返回结果,取不到时从数据库取,数据库取到更新缓存

并返回,取不到直接返回空结果。

2.缓存穿透

问题:是指缓存和数据库中都没有的数据,而用户不断发起请求,这时用户可能是攻击者,攻击会导致数据库压力过大。

解决:

1. 接口层增加校验,例如用户权限校验,合法性校验,请求校验。
 2. 缓存中取不到的数据,数据库中也不存在,可暂时设置一个key-null键值对,有效时间较短,防止用户对同一个数据进行暴力攻击。

3.缓存击穿

问题:是指缓存中没有但是数据库中有的数据,这时由于并发用户较多,同时读缓存没读到数据,同时去数据库取数据,引起数据库瞬间压力过大。

解决:

1. 设置热点数据永不过期。
 2. 热点数据互斥锁处理。

4.缓存雪崩

描述:是指缓存中数据大批量到期时间,而查询数据量巨大,引起数据库压力过大,缓存击穿指的是并发查同一条数据,雪崩是不同的数据都过期了,很多数据都查不到从而查数据库。

解决:

1. 数据缓存时间差异化,减少同一时间大量数据过期现象发生。
 2. 缓存数据分布式处理,热点数据均匀分布在不同的缓存数据库中。
 3. 热点数据永不过期。(可以根据一定的权重定期清理热点数据)

本文标题:缓存穿透/击穿/雪崩

文章作者:Tokey

发布时间:2021年07月25日 - 19:07

最后更新:2021年07月25日 - 20:07

原始链接:http://TokeyRoad.github.io/2021/07/25/缓存穿透-击穿-雪崩/

许可协议: 转载请保留原文链接及作者。

0%