用例:我的每个映射条目都有一个自定义过期时间,此时条目不再有效(TTL 不仅用于限制内存映射的大小,而且 TTL 应用于每个条目,而不是地图配置)。我最初将条目放入地图时设置了此 TTL,过期时间保留在我的底层持久性地图数据存储中,但在从数据库加载条目时我无法重置此 TTL。
public class MyMapStore implements MapStore<MayKey, MapValue> {
@Override
public MapValue load(MayKey key) {
MapValue value = datstore.lookup(key);
Date ttl = value.getExpiration();
// the value has it's own entry-specific TTL, but it seems this can't be used from the MapStore
return value;
}
// . . .
}
该MapLoader
文档似乎表明这可能是不可能的:
加载的条目将被放置到分布式映射中,并且它们将保留在内存中,直到它们被显式删除或隐式驱逐(如果配置了驱逐)。
如果无法使用 来完成此操作MapStore
,则剩下的一些选项似乎是:
- 不要使用
MapStore
,而是从我的持久数据存储中显式查找条目,使用所需的 TTL 加载这些值- 这可能是可行的,但是通过这种方法,我不再能够利用
MapStore
- 这可能是可行的,但是通过这种方法,我不再能够利用
- 运行一个后台线程,定期显式驱逐这些过期条目,而不是依赖 Hazelcast 的自动驱逐
- 这只是很多开销(额外的线程、查询和条目处理),并且需要我的应用程序代码在使用之前检查条目的有效性(因为映射中可能存在过期的条目)
有没有其他方法可以使用我忽略的 Hazelcast 干净/轻松地完成此任务?