当前位置: 首页 > news >正文

【JAVA架构师成长之路】【Redis】第14集:Redis缓存穿透原理、规避、解决方案

30分钟自学教程:Redis缓存穿透原理与解决方案

目标

  1. 理解缓存穿透的成因及危害。
  2. 掌握布隆过滤器、空值缓存等核心防御技术。
  3. 能够通过代码实现请求拦截与缓存保护。
  4. 学会限流降级、异步加载等应急方案。

教程内容

0~2分钟:缓存穿透的定义与核心原因
  • 定义:恶意或异常请求频繁访问数据库中不存在的数据,绕过缓存直接冲击数据库。
  • 典型场景
    • 攻击者伪造大量非法ID(如负数、超长字符串)。
    • 业务未对查询参数校验,或未缓存空结果。
  • 危害
    • 数据库压力激增,甚至宕机。
    • 正常服务被恶意请求拖垮。

2~5分钟:代码模拟穿透场景(Java示例)
// 未做防护的查询方法(模拟穿透问题)  
public Product getProduct(String id) {
     
    String key = "product:" + id;  
    Product product = redisTemplate.opsForValue().get(key);  
    if (product == null) {
     
        // 直接查询数据库(未缓存空值)  
        product = productService.loadFromDB(id);  
        if (product != null) {
     
            redisTemplate.opsForValue().set(key, product, 1, TimeUnit.HOURS);  
        }  
    }  
    return product; // 恶意请求会反复查询数据库  
}  

验证问题

  • 使用JMeter发送100次id=-1的请求,观察数据库查询次数是否为100次(穿透发生)。

5~12分钟:解决方案1——布隆过滤器(Bloom Filter)
  • 原理:基于位数组和哈希函数,快速判断数据是否可能存在于数据库,拦截非法请求。
  • 代码实现(Redisson布隆过滤器)
// 初始化布隆过滤器并预热合法数据  

相关文章:

  • 【从零开始学习计算机科学】数字逻辑(九)有限状态机
  • Android Studio右上角Gradle 的Task展示不全
  • 【程序自动分析——并查集,离散化】
  • DeepSeek提问术:解锁AI交互新姿势-20 个精准提问框架
  • MES系统如何实现远程访问?
  • 基于SpringBoot实现旅游酒店平台功能一
  • 10 个玉米重组自交系种群植物结构的遗传基础
  • Go 语言 + libbpfgo 实战 eBPF 开发
  • linux c++11 gcc4 环境编译安装googletest/gtest v1.10
  • 为AI聊天工具添加一个知识系统 之138 设计重审 之3 文章学 之 引言 之3 纵观三观( 加入 )
  • 无人机推流/RTMP视频推拉流:EasyDSS无法卸载软件的原因及解决方法
  • 饮食 “巧调理”,缓解手抖有妙方
  • Jenkins在Windows上的使用(二):自动拉取、打包、部署
  • Deepin下创建AppImage应用的快捷方式
  • windows:curl: (60) schannel: SEC_E_UNTRUSTED_ROOT (0x80090325)
  • 【UCB CS 61B SP24】 Lecture 25 26 - Minimum Spanning Trees 学习笔记
  • Mysql-主从搭建如何指定库表同步以及新增库表同步
  • 从毕达哥拉斯定理到向量距离和夹角的计算
  • SCSS预处理器(详细讲解、入门教程)
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(一)
  • 怎么购买网站空间和域名/新闻株洲最新
  • 网上做网站怎么赚钱吗/推广普通话作文
  • 网站标题被别人改了 应该怎么办/百度搜索引擎优化的推广计划
  • 深圳做网站-信科网络/广告联盟app下载官网
  • 工商部门在线咨询/长安网站优化公司
  • 农村建设投诉网站首页/怎么自己注册网站