规避缓存穿透:使用布隆过滤器预判不存在的数据;缓存空值,设置短TTL;接口层校验参数;热点数据多级缓存。规避缓存雪崩:Redis高可用,主从+哨兵;随机TTL;降级熔断;多级缓存。规避未授权访问:Redis绑定IP+密码认证;防火墙限制;禁用危险命令;网络隔离。数据泄露风险:未授权访问导致数据全库读取;明文存储敏感数据;持久化文件泄露。性能瓶颈风险:单线程阻塞;大key+热点key;内存不足OOM;慢查询积累。
缓存穿透
缓存穿透是指查询一个一定不存在的数据,因为缓存没有会去查数据库。这是一种恶意攻击,利用不存在的数据反复查询,导致数据库压力很大。解决办法:1.布隆过滤器(BloomFilter)快速判断数据是否存在,减少无效查询;2.缓存空结果:对查询不存在的数据也写缓存,设置短TTL;3.接口校验:严格校验参数,避免无效查询。
缓存雪崩
缓存雪崩是指大批量缓存失效,请求直接打到数据库,导致数据库压力过大甚至宕机。防范措施:1.给缓存设置不同TTL,避免同时失效;2.高可用:Redis集群、主从复制+哨兵;3.降级:部分失败返回默认值;4.熔断机制:限流降级。
未授权访问
Redis默认无密码,公网可直接连。防范:1.配置requirepass密码;2.bind指定IP,只允许内网访问;3.防火墙iptables限制;4.禁用keys、flushall等危险命令;5.使用ACL用户权限控制。
数据泄露风险
1.未设密码+公网暴露,全库可读;2.RDB/AOF文件备份泄露;3.应用层代码泄露key;4.内存dump工具读取。
性能瓶颈
1.大key(list/hash过大)导致复制慢;2.热点key单机QPS瓶颈;3.内存不足频繁evict;4.fork阻塞持久化;5.pipeline少用或慢查询。
最佳实践
生产环境Redis至少密码+bind,结合布隆+空缓存防穿透;TTL随机化+集群防雪崩;监控告警慢查询/OOM。
FAQ
Q: 布隆过滤器怎么用在Redis防穿透?
A: 预先把所有可能数据hash存入布隆,查询先查布隆,不存在直接返回。
Q: 缓存雪崩发生时紧急处理?
A: 重启Redis+临时限流,快速回写热点数据。
Q: Redis密码怎么设置?
A: conf文件requirepass yourpassword,重启生效。
Q: 大key怎么拆分?
A: hash分片存,或用list分段存储。