hazelcast - 当条目达到其生存时间时,我们如何将 Hazelcast 地图条目保存在数据库或文件中?
问题描述
在我的应用程序中,我们使用 Hazelcast 和 oracle DB。
当我们开始一个转换时,我们在 Hazelcast 映射中放置一个包含转换 id 的条目。
如果在 TTL 中使用了该转换 id,那就没问题了。我的应用程序使用了它,并且同一个线程从 hazelcast 映射中逐出该条目并将该转换 ID 保存在数据库中。 没有任何问题
当该转换 ID 未在其 TTL 内使用时,我的问题就出现了。Hazelcast 只是从地图中删除该条目。
我想检索该条目并将其保存在数据库中。
你会如何解决这个问题?我正在使用在至少有 4 个节点的集群中运行的 Hazelcast。
解决方案
一种解决方案是通过Mapstore 接口存储 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 );
10 秒后,您将看到该条目被逐出并打印到控制台。
事件被发送到所有节点,因此最好实现EntryListenerConfig,将其添加到 MapConfig 并将本地参数设置为 true 以仅接收本地事件。
请参阅注册地图侦听器了解更多信息。
推荐阅读
- matplotlib-basemap - 使用 Metpython 和底图进行点插值
- angular - 用 karma jasmine angular2 测试 void
- php - 将项目动态添加到数组 Mike42 php
- docker - 有什么方法可以防止 k8s pod 被驱逐?
- microservices - jhipster 网关和微服务
- python - Python:Azure 存储表在存在时无法插入批处理项
- coldfusion - 从字符串中剥离非 html 标签/文本
- python-3.x - 如何使用 sjoin 合并两个 GeoDataFrames 而不会出错
- powershell - 从 (Send-MailMessage) 返回到 -body 参数中的语言特定变量
- java - 在 Spring REST 中发送 jsp 响应以及状态码