将ttl设置为Imap

时间:2015-09-18 10:22:23

标签: hazelcast ttl hazelcast-imap

我在IMap中有一个(key, value)ttl时没有设置imap.put()。现在,在触发事件后,我想将ttl设置为IMap中的此特定键。因为,在此活动发生时,我不想拨打value = imap.get(key)然后imap.put(key, value, 10, TimeUnit.SECONDS)。 那么如何将ttl设置为该特定键呢?

1 个答案:

答案 0 :(得分:3)

除了使用IMap方法之外,没有直接的方法可以做到这一点。但是,我想知道避免以下呼叫的原因。

value = imap.get(key);
imap.put(key, value, 10, TimeUnit.SECONDS)

如果您仍希望获得结果,可以采用以下方法之一。

  1. 如果您已经拥有价值,请致电imap.set(key, value, 10, TimeUnit.SECONDS)imap.set()效率高于imap.put(),因为它不会返回旧值。

  2. 如果您可以再使用一个IMap:请使用其他地图ttlMap<key, Boolean>。每当您需要为实际imap中的条目设置ttl值时,请在ttlMap.set(key, true, 10, TimeUnit.SECONDS);中设置一个条目。现在,使用MapListener方法向ttlMap添加addEntryListener()。当ttlMap中的条目被驱逐时,entryEvicted(EntryEvent<String, String> arg0)方法将被调用。从此方法中的实际imap中删除您的条目。

  3. 如果您已准备好弄清楚,您可以修改源代码,使process()方法的EntryProcessor方法获得自定义Map.Entry设置密钥的ttlValue的新方法。

  4. 希望这有帮助。