【1】Redis 缓存穿透原理和解决方案
文章目录
- 一、原理
- 正常情况:Redis缓存流程
- 问题引出:Redis缓存穿透问题
- 二、解决方案
- 方案一:缓存空数据
- 方案二:布隆过滤器
一、原理
正常情况:Redis缓存流程
查询数据时,优先查询Redis:
- 命中:直接返回查询结果
- 未命中:查询数据库,返回数据并将数据缓存到Redis中方便下次查询
问题引出:Redis缓存穿透问题
查询一个不存在的数据时,Redis中也没有,会导致每次查询都会穿过Redis去查询数据库,给予数据库非常大的压力。查询次数过多就会击垮数据库。
二、解决方案
方案一:缓存空数据
返回空数据,并将空数据缓存到Redis中。如:{key:1,value:null}
- 优点:简单
- 缺点:
- 消耗内存
(Redis额外存储开销)
- 数据不一致
(数据库的数据改变时,可能导致与Redis中的数据不一致)
- 消耗内存
方案二:布隆过滤器
查询数据时优先查询布隆过滤器,如果存在再去查询Redis和数据库,不存在则直接返回
- 优点:
- 无额外的内存开销
- 极大的减轻数据库压力
- 缺点:有一定的误判率