Hazelcast缓存未基于<time-to-live-seconds>到期而被清除

4
我们将<time-to-live-seconds>配置为1200(20分钟),但缓存在创建时间后一分钟就自动失效了。
请问有人能告诉我们如何使缓存保持指定的时间段吗?
1个回答

9
hazelcast.xml中的以下代码片段将"simpleMap"内条目的time-to-live-seconds属性设置为150秒。150秒以上未更新的旧条目将自动从地图中清除。请保留HTML标记,不需要解释。
<map name="simpleMap">
    <backup-count>0</backup-count>
    <max-idle-seconds>0</max-idle-seconds>
    <eviction-policy>LRU</eviction-policy>
    <time-to-live-seconds>30</time-to-live-seconds>
    <max-size>3000</max-size>
    <eviction-percentage>30</eviction-percentage>
    <merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
</map>

为了测试,我已经将一个entry listener附加到“simpleMap”上(如果使用的是3.5版本,请使用MapListener接口),当从映射中逐出一个条目时,它会打印出键和值。

public static void main(String[] args) 
{
    HazelcastInstance instance = HazelcastHelper.getHazelcastInstance();
    IMap<String, String> map = instance.getMap("simpleMap");
    map.addEntryListener(new SimpleMapEntryListener(), true);

    map.put("evictme", "value");
    printTime();
    try {
        Thread.sleep(1000 * 60);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    printTime();
}

private static void printTime()
{
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    System.out.println( sdf.format(cal.getTime()) );
}

class SimpleMapEntryListener implements EntryListener<String, String>
{

    @Override
    public void entryEvicted(EntryEvent<String, String> arg0) 
    {
        System.out.println("Key : " + arg0.getKey() + " Value: " + arg0.getOldValue() + " evicted.");
        // print current time here.
    }
    // Add other overriden methods.

}

如果你执行上面给出的代码,你会发现<"evictme", "value">这个条目会在30秒后自动被驱逐。你可能需要检查你的max-idle-seconds配置(请注意,在上面的例子中,它被设置为零,这意味着无限制)。如果设置了max-idle-seconds(即不为零),缓存将根据该值进行驱逐。

1
感谢您提供的好答案。看起来EntryListener现在已经被弃用,取而代之的是MapListener:http://docs.hazelcast.org/docs/latest-development/manual/html/Distributed_Events/Event_Listener_for_Members/Listening_for_Map_Events.html - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接