标准答案

  1. 参数校验最靠近入口,可拒绝格式非法、越界和不符合业务规则的请求,成本低但不能判断一个格式正确的 ID 是否真实存在。
  2. 空值缓存把“确认不存在”的结果短暂保存,能抵挡重复查询同一个不存在对象;它需要短 TTL,并注意新对象创建后及时失效或等待过期。
  3. 布隆过滤器用于快速判断一个元素是否肯定不在集合中或可能存在,适合大量 ID 预筛;它有假阳性,不可把“可能存在”当作存在结论。
  4. 布隆过滤器的容量、哈希数量、重建方式和删除策略要随数据生命周期维护;频繁删除的数据可考虑计数布隆、分层过滤器或改用其他索引。

题目解析

穿透保护应从外到内分层:先做鉴权和参数限制,再用集合预筛,最后用短期空值避免重复回源。这样即使某一层失效,也不会让任意请求直接放大到主库。

判断不存在的语义必须可靠。数据库超时或权限拒绝不是“不存在”,将它们写进空值缓存会把偶发故障放大成用户可见的假结果。

常见误区

  • 把布隆过滤器的“可能存在”当作存在,直接跳过数据库校验。
  • 把所有查询失败都缓存为空,掩盖数据库或权限故障。

作者信息