说说 Redis 的缓存穿透?

PassJava (佳必过) 项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。

文档在线地址: www.passjava.cn

说说缓存穿透?

缓存穿透的概念

缓存穿透指一个一定不存在的数据,由于缓存未命中这条数据,就会去查询数据库,数据库也没有这条数据,所以返回结果是 null。如果每次查询都走数据库,则缓存就失去了意义,就像穿透了缓存一样。

带来的风险

利用不存在的数据进行攻击,数据库压力增大,最终导致系统崩溃。

为什么会产生缓存穿透

  • 业务层误操作:缓存中的数据和数据库中的数据被误删除了,所以缓存和数据库中都没有数据;
  • 恶意攻击:专门访问数据库中没有的数据。

解决方案

  • 对结果 null 进行缓存,并加入短暂的过期时间。
  • 使用布隆过滤器快速判断数据是否存在,避免从数据库中查询数据是否存在,减轻数据库压力。 -
  • 前端进行请求检测。把恶意的请求(例如请求参数不合理、请求参数是非法值、请求字段不存在)直接过滤掉,不让它们访问后端缓存和数据库。

作者简介:悟空,8年一线互联网开发和架构经验,用故事讲解分布式、架构设计、Java 核心技术。《JVM性能优化实战》专栏作者,开源了《Spring Cloud 实战 PassJava》项目,公众号:悟空聊架构

悟空的开源项目

https:///Jackson0714/PassJava-Platform