【发布时间】:2016-06-27 23:56:50
【问题描述】:
我在地图中有一个条目(k1,v1),ttl 说 60 秒。
如果我执行 map.set(k1, v2),则 ttl 不受影响,即条目将在 60 秒后被删除。 但是,如果我执行 map.put(k1, v2),则 ttl 将占用存在,即 60 秒后不会删除条目。
这种理解正确吗?我猜是这样,但在文档中找不到明确提及。
【问题讨论】:
我在地图中有一个条目(k1,v1),ttl 说 60 秒。
如果我执行 map.set(k1, v2),则 ttl 不受影响,即条目将在 60 秒后被删除。 但是,如果我执行 map.put(k1, v2),则 ttl 将占用存在,即 60 秒后不会删除条目。
这种理解正确吗?我猜是这样,但在文档中找不到明确提及。
【问题讨论】:
你是对的。使用配置的 ttl 时间时,map.put 存在错误。我刚刚提交了 PR 来修复这里的附加测试:https://github.com/hazelcast/hazelcast-cpp-client/pull/164
我们错误地为 ttl 发送了 0 而不是 -1。 -1 表示使用配置的 ttl。这对 set API 来说已经是正确的了,问题只出在 put API 上。
感谢您报告此事。
【讨论】:
不,put 和 set 操作都有相同的底层实现,只是 set 操作不返回 oldValue。
您可以查看 PutOperation 和 SetOperation 类,它们都在扩展 BasePutOperation。
除非您为每个 put/set 操作设置 ttl,否则驱逐应基于 entry 的最新 ttl 值。
【讨论】: