Hazelcast:如何刷新Hazelcast实例?

时间:2016-02-22 07:01:34

标签: java hazelcast

我正在创建一个服务(ReST),它将一直启动并运行。所以在这个服务中,我从spring上下文中调用init方法,该方法访问数据库并将所需数据加载到hazelcast实例中。

现在我必须确保通过调用init方法刷新hazelcast实例。让我们说刷新周期是每6小时一次。

有没有一种很好的清洁方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

您可以使用Hazelcast eviction policy解决此问题。

<time-to-live-seconds>3600</time-to-live-seconds>

每1小时清除地图内容,当有任何请求到来时,它会从加载程序重新加载该地图内容。

以下是Hazelcast地图配置之一

...
    <!--
        Maximum number of seconds for each entry to stay in the map. Entries that are
        older than <time-to-live-seconds> and not updated for <time-to-live-seconds>
        will get automatically evicted from the map.
        Any integer between 0 and Integer.MAX_VALUE. 0 means infinite. Default is 0.
    -->
    <time-to-live-seconds>0</time-to-live-seconds>
...

或者您可以在向缓存地图添加数据时添加时间,在指定时间后,特定缓存地图也可以清理。

答案 1 :(得分:1)

这可以通过实现Hazelcast提供的EntryListener接口轻松实现 实现以下方法并调用init()方法。

IMap<> map = hzInstance.getMap("mapName");
map.addEntryListener(new MyMapEventListener());

public class MyMapEventListener implements EntryListener{
    @Override
    public void mapCleared(MapEvent mapEvent) {
        //Make your init call inside this
    }

    @Override
    public void mapEvicted(MapEvent mapEvent) {
        //Make your init call inside this
    }
}

如果这是有道理的,请告诉我。