2017-05-23 20 views
-1

我在scala上使用Hazelcast「3.6.3」2.11.8Hazelcast項目的絕對期滿

我寫了這段代碼。

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

對不起,我不是一個斯卡拉的傢伙。但是,你能解釋一下hc.addTimeToLiveMapConfig做了什麼嗎? 通常,您需要在啓動Hazelcast之前將TTL配置添加到Config對象中。

我相信你的情況,你開始Hazelcast,然後才用TTL更新配置。請嘗試與相反的順序。 如果您不想將其添加到配置中,則會有一個重載的map.put方法將TTL作爲輸入。這樣你可以爲每個條目指定TTL。

+0

我更新了代碼。現在應該更清楚了。 –

+0

好的,只需更改設置配置和啓動節點的順序即可。 Hazelcast atm不支持您正在嘗試執行的操作。在啓動節點後,您正在更新配置。 –

+0

config.addMapConfig(新的MapConfig()....應該在val之前hc = Hazelcast.newHazelcastInstance(config) –