1

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

  1. 但我想把它作为Expiration Time for an entry = Creation Time + TTL. 有人可以建议如何实现此功能吗?

  2. 这种行为以前存在,为什么它被改变了?

4

2 回答 2

0

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

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

    set(K key, V value, long ttl, TimeUnit ttlUnit)

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

  1. 现在的诀窍是调整 ttl 以使过期时间不会改变(或者当条目更新时 ttl 不会得到更新)。我做了

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

它使用 hazelcast 3.7.5 进行了试验和测试。但是,由于对 ttl 的这种调整,它可能会导致到期日期出现几毫秒的差异。

于 2018-11-01T16:19:28.837 回答
0

自 3.3.3 版以来,这种行为确实发生了变化。显然,以前的行为被社区认为是一个错误。

可能性:

  1. 打开一个 github issue,如果你吸引了足够多的支持者,它可能会被实施
  2. 继续使用 3.3.2(看起来不是很吸引人,但也有可能)
  3. 将您的地图一分为二(“不可变”和可变),并且仅在检查第一个中存在密钥后才访问第二个。当你想更新值时,只在第二个中进行。这样,由于您根本没有更新第一个地图,因此条目将ttl在创建时间后过期。
于 2015-11-10T21:12:14.817 回答