展开全部 ↓

Redis缓存穿透问题

Redis「缓存穿透」是一个很经典的问题,本质是:请求的数据在缓存和数据库里都不存在,导致每次请求都会直接打到数据库。 一、什么是缓存穿透 场景: 用户请求一个 不存在的 key(比如 id = -1 或乱造的 id) Redis 查不到 → 去数据库查 数据库也查不到 → 返回空 Redis 不缓存这个空结果 结果就是,每次请求都会重复打数据库 如果被恶意利用(比如刷不存在的 ID),数据库会被打爆。 二、常见解决方案 1.缓存空值(最简单有效) 做法: 数据库查不到 → 也写入 Redis 但存一个空值(比如 null 或特殊标记) 设置较短过期时间(如 60 秒) 1 2 3 if data == nil { redis.set(key, "NULL", 60s) } 优点: 立刻生效 实现简单 缺点: 会占用少量缓存空间 2.使用布隆过滤器(Bloom Filter)(推荐) 在请求进入 Redis 前,先判断「这个 key 是否可能存在」 流程: 把所有合法 key(比如用户 ID)加入布隆过滤器 请求来了先判断: 不存在 → 直接返回(拦截) 可能存在 → 再查 Redis 特点: ...

March 23, 2026 · 1 min
留言