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

问题描述 投票:0回答:1

在我的应用程序中,我们正在使用Hazelcast和一个oracle DB。

[开始过渡时,我们在Hazelcast映射中放置了包含过渡ID的条目。

如果该过渡ID在TTL中使用,则可以。我的应用程序使用了它,并且同一线程从hazelcast映射中退出了该条目,并将该过渡ID保存在数据库中。 没有问题

我的问题是在TTL中未使用该过渡ID时。 Hazelcast只是从地图上删除了该条目。

我想检索该条目并将其保存在数据库中。

您将如何解决这个问题?我正在与在至少有4个节点的群集中运行的Hazelcast一起工作。

hazelcast
1个回答
0
投票

一种解决方案是通过Mapstore Interface存储Hazelcast Map,因此即使驱逐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 );

[10秒钟后,您将看到该条目已被逐出并打印到控制台。

事件被发送到所有节点,因此更好地实现EntryListenerConfig,将其添加到MapConfig并将local参数设置为true以仅接收本地事件会更好。

请参阅Registering Map Listeners了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.