load使用MapStore
custom TTL的地图条目是否有办法?
使用案例:我的地图条目每个都有自定义过期,此时条目不再有效(TTL不只是用于限制内存映射的大小,并且TTL应用于每个条目,不到地图配置)。我最初put我在地图中的条目时设置了这个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轻松/轻松地完成这项工作,我可以忽略它?
答案 0 :(得分:1)
截至Hazelcast版本3.6,没有一种好方法可以实现这一点,因此我需要使用原始帖子中确定的替代方案之一。
已记录Hazelcast Issue 7728以解决此问题。
有关相关讨论,请参阅Hazelcast Google Group。
答案 1 :(得分:0)
您检查过:http://docs.hazelcast.org/docs/latest/manual/html-single/index.html#understanding-map-eviction
驱逐特定条目 上面解释的驱逐策略和配置适用于地图的所有条目。符合指定驱逐条件的条目被驱逐。
但是你可能想要驱逐一些特定的地图条目。在这种情况下,您可以使用方法map.put()的ttl和timeunit参数。下面给出了一个示例代码行。
myMap.put(“1”,“John”,50,TimeUnit.SECONDS)
带有键“1”的地图条目将在放入myMap后50秒被驱逐。