对于该条目的每次更新,都会更改Map中条目的TTL值

时间:2015-10-26 17:46:13

标签: hazelcast ttl hazelcast-imap

我正在尝试使用Hazelcast Map并发现Expiration time for an entry = Last Updated Time + TTL

  1. 但我希望将其作为Expiration Time for an entry = Creation Time + TTL。有人可以建议如何实现这个功能??

  2. 以前存在此行为,是否有任何原因发生了变化?

2 个答案:

答案 0 :(得分:0)

自版本3.3.3以来,行为确实发生了变化。显然,社区以前的行为是considered a bug

的可能性:

  1. 打开一个github问题,如果你吸引足够的支持者就可以实施
  2. 继续使用3.3.2(看起来不太引人注目,但也有可能)
  3. 将您的地图分成两部分("不可变"并且可变),并且只有在检查第一部分中存在该密钥后才能访问第二部分。如果要更新值,只能在第二个中更新。这样,由于您根本不更新第一张地图,因此条目将在创建时间后到期ttl

答案 1 :(得分:0)

它是旧线程,但也许此解决方案可以帮助某人。我在hazelcast 3.7.x中遇到了相同的情况。这是我所做的

  1. 我正在使用IMap,它提供了使用ttl设置条目的方法

    设置(K键,V值,长ttl,TimeUnit ttlUnit)

使用此方法,您可以使用此ttl进行输入,这将相应地更新到期时间。

  1. 现在的窍门是调整ttl,以使到期时间不会更改(或在条目更新时ttl也不会更新)。我做到了

    ttl = myImap.getEntryView(key).getExpirationTime()-新的java.util.Date()。getTime(); myImap.set(key,value,ttl,TimeUnit.MILLISECONDS);

它通过hazelcast 3.7.5进行了尝试和测试。但是,由于对ttl的这种调整,我可能会导致到期日期相差几毫秒。