受欢迎的手机网站建设网络卖货平台有哪些
30分钟自学教程:Redis缓存穿透原理与解决方案
目标
- 理解缓存穿透的成因及危害。
- 掌握布隆过滤器、空值缓存等核心防御技术。
- 能够通过代码实现请求拦截与缓存保护。
- 学会限流降级、异步加载等应急方案。
教程内容
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布隆过滤器):
// 初始化布隆过滤器并预热合法数据