Hazelcast项目绝对到期

时间:2017-05-23 20:10:55

标签: hazelcast

我在scala 2.11.8上使用Hazelcast“3.6.3”

我已经写了这段代码。

val config = new Config("mycluster")
config.getNetworkConfig.getJoin.getMultcastConfig.setEnabled(false)
config.getNetworkConfig.getJoin.getMulticastConfig.setEnabled(false)
config.getNetworkConfig.getJoin.getAwsConfig.setEnabled(false)
config.getNetworkConfig.getJoin.getTcpIpConfig.setMembers(...)
config.getNetworkConfig.getJoin.getTcpIpConfig.setEnabled(true)
val hc = Hazelcast.newHazelcastInstance(config)
hc.getConfig.addMapConfig(new MapConfig()
     .setName("foo")
     .setBackupCount(1)
     .setTimeToLiveSeconds(3600)
     .setAsyncBackupCount(1)
     .setInMemoryFormat(InMemoryFormat.BINARY)
     .setMaxSizeConfig(new MaxSizeConfig(1, MaxSizePolicy.USED_HEAP_SIZE))
)
hc.putValue[(String, Int)]("foo", "1", ("foo", 10))

我注意到1小时结束时,hazelcast不会从缓存中删除这些项目。这些物品似乎永远存在于缓存中。

我不希望滑动过期。我希望绝对过期这意味着在1小时后,无论在一小时内访问该项目多少次,该项目都必须被踢出。

我已经完成了所需的谷歌搜索,我认为上面的代码是正确的。但是当我查看我的服务器日志时,我很确定没有从缓存中删除任何内容。

1 个答案:

答案 0 :(得分:0)

抱歉,我不是斯卡拉人。但你能解释一下hc.addTimeToLiveMapConfig会做什么吗? 通常,您需要在启动Hazelcast之前将TTL配置添加到Config对象中。

我相信你的情况,你正在启动Hazelcast,然后才用TTL更新配置。请尝试相反的顺序。 如果您不想将其添加到配置中,则会有一个重载的map.put方法,该方法将TTL作为输入。这样您就可以为每个条目指定TTL。