在 hazelcast 中根据条目字段为所有条目设置 TTL/Record 过期

Setting TTL/Record Expiry in hazelcast for all entries based on entries field

我们正在尝试为地图中的每条记录设置自定义到期时间。 每个对象都有字段 'long expireDate',它是我们希望删除对象的时间(以毫秒为单位)。

我们是否也可以实施一些策略来根据每个条目的该字段的值删除记录?

调查了这个问题,但这是通过 put 进行的每个条目。 Setting TTL/Record Expiry in hazelcast

IMap::put(Key, Value, TTL, TimeUnit)

这个问题是我们 95% 的条目是使用 putAll 放置在那里的,因此不能以这种方式提供。

IMDG 3.11 及更高版本中可用的 IMap.setTTL() 方法允许您在地图中的条目上设置单独的 TTL 值。我认为这里的解决方案是编写一个小过程来读取条目的 expireDate 值,计算当前系统时间的偏移量,并将映射条目的 TTL 设置为该偏移量。

然后可以将此过程作为 EntryProcessor(可能紧接在 putAll 操作之后,使用同一组键)或作为 MapListener 执行,只要添加条目(或更新,如果更新)有时会更改 expireData 值)。