0

我有一个IMapin hazelcast (key, value),当时没有ttl设置imap.put()。现在触发事件后,我想ttlIMap. 因为,在这个事件发生时,我不想打电话给value = imap.get(key)then imap.put(key, value, 10, TimeUnit.SECONDS)。那么如何将 ttl 设置为该特定键?

4

2 回答 2

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);. 现在,添加一个MapListenerto ttlMapusingaddEntryListener()方法。当一个条目ttlMap被驱逐时,entryEvicted(EntryEvent<String, String> arg0)方法将被调用。将您的条目从imap该方法中的实际内容中逐出。

  3. 如果您准备好动手,您可以修改源代码,使该process()方法的EntryProcessor 方法将接收一个自定义Map.Entry的新方法来设置键的 ttlValue。

希望这可以帮助。

于 2015-09-26T14:48:38.173 回答
0

从 3.11 版开始,HazelcastIMapsetTtl(K key,long ttl, TimeUnit timeunit)方法正是这样做的:

用新的 TTL 值更新 key 指定的条目的 TTL(生存时间)值。新的 TTL 值从调用此操作时开始有效,而不是从创建条目时开始。如果条目不存在或已过期,则此调用无效。

于 2022-01-10T16:39:36.760 回答