【问题标题】:TTL value of an entry in Map is changed for every update of that entry每次更新该条目时,都会更改 Map 中条目的 TTL 值
【发布时间】:2015-10-26 17:46:12
【问题描述】:

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

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

  2. 此行为以前存在,为什么要更改?

【问题讨论】:

    标签: hazelcast ttl hazelcast-imap


    【解决方案1】:

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

    可能性:

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

    【讨论】:

      【解决方案2】:

      它是一个旧线程,但也许这个解决方案可以帮助某人。我在使用 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 的这种调整,它可能会导致过期日期出现几毫秒的差异。

      【讨论】:

        猜你喜欢
        • 2020-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-02
        相关资源
        最近更新 更多