当Hazelcast地图条目到达有效期时,我们如何将其保存在数据库或文件中?
在我的应用程序中,我们使用Hazelcast和oracle数据库 当我们开始转换时,我们在Hazelcast映射中放置一个包含转换id的条目 如果该转换id在TTL中使用,则可以。我的应用程序使用了它,同一个线程从hazelcast映射中逐出该条目,并将该转换id保存在数据库中无问题 我的问题出现在转换id未在其TTL中使用时。Hazelcast只是从地图中删除该条目 我想检索该条目并将其保存在数据库中当Hazelcast地图条目到达有效期时,我们如何将其保存在数据库或文件中?,hazelcast,Hazelcast,在我的应用程序中,我们使用Hazelcast和oracle数据库 当我们开始转换时,我们在Hazelcast映射中放置一个包含转换id的条目 如果该转换id在TTL中使用,则可以。我的应用程序使用了它,同一个线程从hazelcast映射中逐出该条目,并将该转换id保存在数据库中无问题 我的问题出现在转换id未在其TTL中使用时。Hazelcast只是从地图中删除该条目 我想检索该条目并将其保存在数据库中 你将如何处理这个问题?我正在使用至少有4个节点的群集中运行的Hazelcast。一个解决方案
你将如何处理这个问题?我正在使用至少有4个节点的群集中运行的Hazelcast。一个解决方案是通过存储Hazelcast映射,这样即使退出了启用TTL的数据,它也会保留在您的备份存储中 另一种解决方案是捕获逐出的条目并将其存储到某个备份存储区 下面是一个示例应用程序,您可以自己尝试
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
IMap<String, String> map = hazelcastInstance.getMap("test");
map.addEntryListener(new EntryEvictedListener<String,String>() {
@Override
public void entryEvicted(EntryEvent<String, String> entryEvent) {
System.out.println(entryEvent.getKey() + ":" + entryEvent.getOldValue());
}
},true);
map.put( "1", "John", 10, TimeUnit.SECONDS );
HazelcastInstance HazelcastInstance=Hazelcast.newHazelcastInstance();
IMap map=hazelcastInstance.getMap(“测试”);
addEntryListener(新entryexecutedListener(){
@凌驾
public void entryexecuted(EntryEvent EntryEvent){
System.out.println(entryEvent.getKey()+”:“+entryEvent.getOldValue());
}
},对);
地图。放置(“1”,“约翰”,10,时间单位。秒);
10秒后,您将看到条目被逐出并打印到控制台
事件被发送到所有节点,因此最好实现EntryListenerConfig,将其添加到MapConfig中,并将local参数设置为true以仅接收本地事件
有关更多信息,请参阅