当Hazelcast地图条目到达有效期时,我们如何将其保存在数据库或文件中?

当Hazelcast地图条目到达有效期时,我们如何将其保存在数据库或文件中?,hazelcast,Hazelcast,在我的应用程序中,我们使用Hazelcast和oracle数据库 当我们开始转换时,我们在Hazelcast映射中放置一个包含转换id的条目 如果该转换id在TTL中使用,则可以。我的应用程序使用了它,同一个线程从hazelcast映射中逐出该条目,并将该转换id保存在数据库中无问题 我的问题出现在转换id未在其TTL中使用时。Hazelcast只是从地图中删除该条目 我想检索该条目并将其保存在数据库中 你将如何处理这个问题?我正在使用至少有4个节点的群集中运行的Hazelcast。一个解决方案

在我的应用程序中,我们使用Hazelcast和oracle数据库

当我们开始转换时,我们在Hazelcast映射中放置一个包含转换id的条目

如果该转换id在TTL中使用,则可以。我的应用程序使用了它,同一个线程从hazelcast映射中逐出该条目,并将该转换id保存在数据库中无问题

我的问题出现在转换id未在其TTL中使用时。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以仅接收本地事件

有关更多信息,请参阅