Hazelcast Near Cache未按配置在60秒后失效问题求助
Hazelcast 3.12 Near Cache 过期失效问题排查方案
核心原因:懒删除机制
Hazelcast的Near Cache过期条目不会实时主动删除,采用懒删除策略:
- 仅当你尝试访问该条目时,才会检查是否过期并移除
- 后台清理任务(默认每10秒执行一次)会批量清理过期条目,但不会立即清空所有过期项
直接调用size()得到的数值可能包含已过期但未被清理的条目,这不代表缓存未失效。
验证方法
- 实际访问条目:尝试获取已过TTL的key,确认是否真的失效:
Object value = nearCachedMap.get("target-key"); // 返回null则说明条目已过期,只是未被清理出size统计
- 强制清理过期条目:调用API手动触发清理后再查看size:
nearCachedMap.evictExpiredEntries(); System.out.println(nearCachedMap.size()); // 此时显示的是有效条目数
可能的配置遗漏与修复
- 确认名称匹配:确保
<near-cache name="near-cache-map">中的name与你使用的Map名称完全一致(大小写敏感),否则配置不会绑定到目标Map。 - 检查Map自身TTL:如果对应Map设置了更长的
time-to-live-seconds,可能会覆盖Near Cache的配置,需确保两者过期策略一致。 - 调整清理频率:若需要更及时的清理,可修改全局配置的清理间隔(单位:毫秒):
<hazelcast> <properties> <property name="hazelcast.map.entry.cleanup.interval">5000</property> <!-- 改为5秒执行一次清理 --> </properties> </hazelcast>
其他注意点
local-update-policy="INVALIDATE"仅影响本地更新时的缓存失效逻辑,与TTL过期无关,当前配置无需调整。- 可通过Hazelcast Management Center查看Near Cache统计:在「Near Caches」页面查看
Expired Count和Evicted Count,确认过期逻辑是否正常运行。
内容的提问来源于stack exchange,提问作者MustafaOmar
相关产品推荐
相关产品推荐

