外观
如何理解缓存命中、失效与击穿?
标准回答
搜索缓存键通常需要包含规范化查询、过滤、排序、分页、数据版本和影响结果的权限范围。遗漏租户或权限会产生越权,遗漏版本会返回过期结果。个性化结果不能仅按关键词共享。
Cache-aside 的常见路径是先查缓存,未命中读后端并回填;写入后失效策略需要考虑并发旧读回填。对一致性要求更高的内容,可以使用版本化键或校验版本。TTL 是上界控制工具,不能保证每次都读到最新状态。
热点失效会造成击穿,可用同键请求合并、短期锁或受控旧值服务;空结果缓存需要短 TTL 和权限隔离;大量同时过期可以适当打散。所有策略都应有等待上限和失败回退,不能让缓存锁变成新的无限队列。
追问与回答
缓存已经失效为什么又出现旧数据
先读到旧数据库结果的请求可能在失效后回填。需要版本校验、写读协议或明确可接受的短暂不一致范围。
命中率 95% 是否说明架构很好
还要看未命中 P95、缓存成本、数据新鲜度和命中是否正确。高命中可能只是访问集中,并不能证明后端扩展能力。
易混淆点
- 跨用户复用未包含权限条件的缓存键。
内容来源
- Android 与 AI 工程 Wiki · 原条目
q138