缓存失效
读缓存需要在查询上显式开启,写入后的缓存失效也需要按单次写入或运行时配置显式开启。
默认行为
写操作默认不失效读缓存:
这样可以避免写多系统因为默认 broad 失效产生大量缓存删除和回填压力。
单次写入精准失效
如果明确知道本次写入影响哪个缓存读请求,使用 cache.invalidate:
支持的 descriptor 操作:find、findOne、count、findPage、aggregate、distinct、findOneById、findByIds。
对于聚合写入管道($merge / $out),descriptor 失效会按写入目标集合解析。
单次写入不失效覆盖
cache.invalidate: false 与 cache.invalidate: [] 表示本次写入不失效任何缓存。即使实例配置了 cache.autoInvalidate: true,也会被本次空清单覆盖:
广泛失效
当一次写入可能影响大量缓存读请求时,可以选择 broad 失效:
也可以全局开启:
全局 broad 失效更省心,但会增加缓存删除量、Redis Pub/Sub 消息量和缓存回填压力。
手动失效
使用原生 driver、外部任务或维护脚本改数据后,调用 collection.invalidate():
invalidate() 清理集合读缓存 pattern。它不会让 MongoDB 写入与缓存失效变成原子提交。