我正在尝试在IMap中的记录上设置TTL,该记录是从cassandra mapStore加载的。 为了实现这一点,我为IMap实现了一个EntryAdded和一个EntryUpdated事件监视器。但是,当我从mapstore读取数据并将其放回hazelcast时,不会调用这些方法。
我的期望是错的吗? 如果是这样,那么实现这一目标的可能解决方案是什么?
由于
答案 0 :(得分:1)
MapLoader.loadAll()
将在最初填充 IMap 时生成 ADDED 事件。此后,MapLoader.load()
无法为之后加载的对象生成 ADDED 事件。
这是不一致的,并记录为问题https://github.com/hazelcast/hazelcast/issues/7771
即使修复了这个问题,它也不会设置不同的TTL。
为此,您可能需要调查" 缓存 - "设计模式,您的代码测试 IMap 的数据存在,并执行Cassandra检索和Hazelcast保存,这将允许每个条目使用不同的TTL。
答案 1 :(得分:1)
我不认为可以在使用MapLoader加载条目时设置TTL。以下是您可以遵循的方法: 1.检查条目是否不在缓存中 2.如果不在缓存中 - 从数据存储中获取它。使用PUT方法可以设置TTL。您可以将此逻辑包装在Hazelcast Callable中,该逻辑可以配置为分区感知。这将节省网络成本,因为它将在数据所在的节点上执行代码