关于Caffeine缓存过期键刷新触发条件及定期清理的问询
Caffeine缓存过期键行为详解
1. 访问特定过期键时的刷新逻辑
当对已过期的缓存键执行get类操作时:
- 如果配置了
refreshAfterWrite策略且提供了CacheLoader,Caffeine会自动触发该键的刷新(重新加载最新值),这个过程通常是异步的,不会阻塞当前get请求(除非配置了同步刷新)。 - 如果仅配置了
expireAfterWrite或expireAfterAccess过期策略,访问过期键会直接将其从缓存中移除,并返回null,不会自动执行刷新操作。
2. 其他缓存操作是否会触发过期键刷新?
不会。添加新键、修改或访问其他未过期键等操作,不会触发某个特定过期键的刷新。不过这类操作可能会顺带触发过期键的清理(即移除过期条目),但清理和刷新是完全不同的行为:清理只是删除无效条目,刷新是重新加载键的最新值,仅针对被访问的目标键。
3. 长时间未访问的缓存,是否会定期刷新/清理?
Caffeine默认采用惰性清理机制:只有当缓存执行get、put等操作时,才会检查并清理过期条目,不会主动定期扫描。
如果需要定期清理过期键,可以通过配置executor指定调度线程,开启主动清理功能,但主动清理也只是移除过期条目,不会自动刷新过期键——刷新必须是该键被访问且满足刷新规则(如refreshAfterWrite时间窗口已过)时才会触发。
内容的提问来源于stack exchange,提问作者RaRa
相关产品推荐
相关产品推荐

