Hazelcast IMap TTL 到期
Hazelcast IMap TTL Expiry
在IMap的put方法中,一旦TTL集过期,如何调用一个方法将数据同步到一些DB或Kafka class。
eg:IMap.put(key,value,TTL,TimeUnit.SECONDS);
如果上面的 TTL 设置为 10 秒左右,我必须调用一些存储或某种机制,以便我可以将该键和值实时同步到 DB 或 Kafka。截至目前,当我尝试存储方法时,它会立即调用该方法,而不是等待 10 秒。
您可以为您的地图配置设置一个 EntryExpiredListener。
它以两个基于过期的驱逐来源为食,它们是 max-idle-seconds
和 time-to-live-seconds
。
示例侦听器 class:
@Slf4j
public class MyExpiredEntryListener implements EntryExpiredListener<String, String>, MapListener {
@Override
public void entryExpired(EntryEvent<String, String> event) {
log.info("entry Expired {}", event);
}
}
您可以通过编程方式添加此配置,或者您可以通过 xml 配置文件设置 mapconfig。
用法示例:
public static void main(String[] args) {
Config config = new Config();
MapConfig mapConfig = config.getMapConfig("myMap");
mapConfig.setTimeToLiveSeconds(10);
mapConfig.setEvictionPolicy(EvictionPolicy.RANDOM);
HazelcastInstance hz = Hazelcast.newHazelcastInstance(config);
IMap<String, String> map = hz.getMap("myMap");
map.addEntryListener(new MyExpiredEntryListener(), true);
for (int i = 0; i < 100; i++) {
String uuid = UUID.randomUUID().toString();
map.put(uuid, uuid);
}
}
当运行执行此操作时,您将看到如下日志。
entry Expired EntryEvent{entryEventType=EXPIRED, member=Member [192.168.1.1]:5701 - ca76c6d8-abe0-4efe-a6a6-24330657675b this, name='myMap', key=70ee594c-ffea-4584-aefe-1148b9fcdf9f, oldValue=70ee594c-ffea-4584-aefe-1148b9fcdf9f, value=null, mergingValue=null}
另外,您可以根据自己的需要使用其他入口监听器。
在IMap的put方法中,一旦TTL集过期,如何调用一个方法将数据同步到一些DB或Kafka class。
eg:IMap.put(key,value,TTL,TimeUnit.SECONDS);
如果上面的 TTL 设置为 10 秒左右,我必须调用一些存储或某种机制,以便我可以将该键和值实时同步到 DB 或 Kafka。截至目前,当我尝试存储方法时,它会立即调用该方法,而不是等待 10 秒。
您可以为您的地图配置设置一个 EntryExpiredListener。
它以两个基于过期的驱逐来源为食,它们是 max-idle-seconds
和 time-to-live-seconds
。
示例侦听器 class:
@Slf4j
public class MyExpiredEntryListener implements EntryExpiredListener<String, String>, MapListener {
@Override
public void entryExpired(EntryEvent<String, String> event) {
log.info("entry Expired {}", event);
}
}
您可以通过编程方式添加此配置,或者您可以通过 xml 配置文件设置 mapconfig。
用法示例:
public static void main(String[] args) {
Config config = new Config();
MapConfig mapConfig = config.getMapConfig("myMap");
mapConfig.setTimeToLiveSeconds(10);
mapConfig.setEvictionPolicy(EvictionPolicy.RANDOM);
HazelcastInstance hz = Hazelcast.newHazelcastInstance(config);
IMap<String, String> map = hz.getMap("myMap");
map.addEntryListener(new MyExpiredEntryListener(), true);
for (int i = 0; i < 100; i++) {
String uuid = UUID.randomUUID().toString();
map.put(uuid, uuid);
}
}
当运行执行此操作时,您将看到如下日志。
entry Expired EntryEvent{entryEventType=EXPIRED, member=Member [192.168.1.1]:5701 - ca76c6d8-abe0-4efe-a6a6-24330657675b this, name='myMap', key=70ee594c-ffea-4584-aefe-1148b9fcdf9f, oldValue=70ee594c-ffea-4584-aefe-1148b9fcdf9f, value=null, mergingValue=null}
另外,您可以根据自己的需要使用其他入口监听器。