我在IMap
中有一个(key, value)
,ttl
时没有设置imap.put()
。现在,在触发事件后,我想将ttl
设置为IMap
中的此特定键。因为,在此活动发生时,我不想拨打value = imap.get(key)
然后imap.put(key, value, 10, TimeUnit.SECONDS)
。
那么如何将ttl设置为该特定键呢?
答案 0 :(得分:3)
除了使用IMap
方法之外,没有直接的方法可以做到这一点。但是,我想知道避免以下呼叫的原因。
value = imap.get(key);
imap.put(key, value, 10, TimeUnit.SECONDS)
如果您仍希望获得结果,可以采用以下方法之一。
如果您已经拥有价值,请致电imap.set(key, value, 10, TimeUnit.SECONDS)
。 imap.set()
效率高于imap.put()
,因为它不会返回旧值。
如果您可以再使用一个IMap
:请使用其他地图ttlMap<key, Boolean>
。每当您需要为实际imap
中的条目设置ttl值时,请在ttlMap.set(key, true, 10, TimeUnit.SECONDS);
中设置一个条目。现在,使用MapListener
方法向ttlMap
添加addEntryListener()
。当ttlMap
中的条目被驱逐时,entryEvicted(EntryEvent<String, String> arg0)
方法将被调用。从此方法中的实际imap
中删除您的条目。
如果您已准备好弄清楚,您可以修改源代码,使process()
方法的EntryProcessor
方法获得自定义Map.Entry
设置密钥的ttlValue的新方法。
希望这有帮助。