我们正在尝试为 map 中的每条记录设置自定义到期时间。 每个对象都有一个“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 执行,只要添加条目(或更新,如果更新有时会改变),就会触发 MapListener expireData 值)。关于java - 根据条目字段在 hazelcast 中为所有条目设置 TTL/记录过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56219852/