我在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小时后,无论在一小时内访问该项目多少次,该项目都必须被踢出。
我已经完成了所需的谷歌搜索,我认为上面的代码是正确的。但是当我查看我的服务器日志时,我很确定没有从缓存中删除任何内容。
答案 0 :(得分:0)
抱歉,我不是斯卡拉人。但你能解释一下hc.addTimeToLiveMapConfig会做什么吗? 通常,您需要在启动Hazelcast之前将TTL配置添加到Config对象中。
我相信你的情况,你正在启动Hazelcast,然后才用TTL更新配置。请尝试相反的顺序。 如果您不想将其添加到配置中,则会有一个重载的map.put方法,该方法将TTL作为输入。这样您就可以为每个条目指定TTL。