2016-12-07 48 views
0

我已經寫了hazelcast緩存framewrok進行緩存,並專門用於通過構造函數注入進行緩存的hazelcast服務器。只是想知道IMap對象存儲在哪裏?無論是在我的hazelcast服務器還是在我的應用程序中,這個類正在運行?要存儲在hazelcast中用於緩存的IMap中的數據存儲在hazelcast服務器中或hazelcast實例正在運行的位置?

public String hazelClientServer; 
public static HazelcastInstance hazelcastInstance; 

// setting through constructor injection 
public HazelCastCache(String hazelClientServer) { 
    this.hazelClientServer = hazelClientServer; 
} 



private IMap<Object, Object> getMap(String mapName,String configName){ 

    Config conf = new Config(configName); 

    MapConfig mapConfig = new MapConfig(mapName); 
    mapConfig.setEvictionPolicy(EvictionPolicy.LRU); 
    mapConfig.setEvictionPercentage(10); 
    conf.addMapConfig(mapConfig); 
    conf.getNetworkConfig().setPublicAddress(hazelClientServer); 
    hazelcastInstance = Hazelcast.getOrCreateHazelcastInstance(conf); 
    IMap<Object, Object> hazelMap=hazelcastInstance.getMap(mapName); 
    return hazelMap; 
} 

public Object getDataFromCache(String mapName,String configName,Object key){ 

    IMap<Object, Object> dataMap = getMap(mapName,configName); 
    Object data = dataMap.get(key); 
    return data; 

} 

public void addDataToCache(String mapName,String configName,Object key,Object value){ 

    IMap<Object, Object> dataMap = getMap(mapName,configName); 
    dataMap.put(key, value); 

} 

回答

1

這取決於您啓動羣集的方式。

這是什麼文檔指出:

在嵌入式拓撲,成員包括數據和應用 。如果您的應用專注於高性能計算和執行許多任務 ,則此類拓撲最有用。由於應用程序接近數據,因此此拓撲支持 數據局部性。

在客戶端 - 服務器拓撲中,您​​創建了一個成員集羣,並且 獨立伸縮集羣。您的應用程序託管在 客戶端上,並且客戶端與集羣 中的成員進行通信以獲取數據。

通過看你的代碼,你開始在嵌入式模式,在這種情況下數據駐留在您的應用程序服務器本身集羣/節點。因此,您還需要考慮緩存大小,以便爲應用程序容器分配內存。

+0

謝謝!您的建議對我來說有點用處。我的想法是數據駐留在hazelcast服務器中,並從那裏我的應用程序在本地進行重試。但當我重新啓動我的應用程序。服務器,緩存地圖是空的有點提高問題如何數據不會持久,因爲我沒有重新啓動hazelcast服務器。也許當應用程序服務器重新啓動映射緩存服務器也重置這可能是一種可能的情況下,第二個可以是你的。 –

+0

您的理解在緩存重置上不正確。無論哪種情況,數據都只在Hazelcast容器中。但是,自從您開始使用嵌入式模式後,如果停止應用程序服務器,它也會關閉Hazelcast羣集,導致所有數據丟失。我寧願建議您將Hazelcast羣集作爲獨立羣集啓動,然後利用HazelcastClient訪問該HZ服務器中的數據。 –

+0

好的..在這種情況下,我的數據將始終在榛樹集羣中,即使我重新啓動我的應用服務器,除非我做集羣清理? –

0

不知道我明白了這個問題,但是如果這段代碼在你的應用程序中,它就在應用程序中運行。

+0

如果您已經在緩存中工作,您將理解我的問題。緩存數據正在存儲在IMap上面。我的問題是這個IMap在哪裏,在外面的應用程序或我的應用程序內的hazelcast服務器。 –

+1

對於外部羣集,數據存儲在羣集中(應用程序外部),嵌入羣集中,數據存儲在您的應用程序內(但仍在羣集中,因爲您的應用程序本身就是羣集)。也就是說,數據總是存儲在集羣中。 – noctarius

+0

謝謝noctarius –