2016-03-08 101 views
3

有沒有辦法通過load導入地圖條目custom TTL使用MapStoreHazelcast MapStore通過TTL加載

使用案例:我的每個映射條目都有一個自定義過期,此時條目不再有效(TTL不僅限制內存映射的大小,並且TTL應用於每個條目,而不是地圖配置)。當我初始地址爲put時,我設置了此TTL,過期時間保留在我的基礎持久性映射數據存儲中,但從數據庫加載我的條目時無法重置此TTL。

public class MyMapStore implements MapStore<MayKey, MapValue> { 

    @Override 
    public MapValue load(MayKey key) { 
     MapValue value = datstore.lookup(key); 
     Date ttl = value.getExpiration(); 
     // the value has it's own entry-specific TTL, but it seems this can't be used from the MapStore 
     return value; 
    } 

    // . . . 

} 

MapLoader文檔似乎表明這是不可能的:

加載項將被放入分佈圖,他們將 留在內存中,直到它們被顯式刪除或隱含逐出 (如果配置驅逐)。

如果沒有辦法用MapStore做到這一點,一些剩餘的選項似乎是:

  • 不要使用MapStore,而是明確地查找條目從我 持久數據存儲,裝載與這些值所需的TTL
    • 這可能是可行的,但這種做法,我不再能夠採取的MapStore
    • 好處 優勢
  • 運行一個後臺線程週期性明確驅逐這些過期的條目,而不是依賴於Hazelcast的自動驅逐
    • 這僅僅是一個很大的開銷(附加線程,查詢和錄入處理),並要求我的應用程序代碼檢查條目的有效性在使用之前(因爲在地圖中可能存在過期的條目)

是否有任何其他方式來完成這項乾淨/輕鬆地與Hazelcast是我俯瞰?

回答

1

從Hazelcast 3.6版本開始,沒有一種好方法可以實現這一點,所以我需要使用原始文章中標識的替代方案之一。

Hazelcast Issue 7728已記錄到解決這個問題。

相關討論請參見Hazelcast Google Group爲好。

0

你檢查:http://docs.hazelcast.org/docs/latest/manual/html-single/index.html#understanding-map-eviction

驅逐的具體條目 逐出策略和配置上面說明應用到地圖的所有條目。符合特定驅逐條件的條目被驅逐出境。

但是你可能想要驅逐一些特定的地圖條目。在這種情況下,可以使用方法map.put()的ttl和timeunit參數。下面給出了一個示例代碼行。

myMap.put( 「1」, 「約翰」,50,TimeUnit.SECONDS)

的映射條目與鍵 「1」,將其放入MYMAP之後將被驅逐50秒。

+0

是的,這正是我使用當我第一次把項目到地圖,但問題是,加載與MapStore條目時,我不能用這種方法。 – shelley