2014-04-11 103 views
0

我打算使用Hazelcast進行Http會話聚類。我閱讀了這個文檔 - http://hazelcast.org/docs/latest/manual/html/httpsessionclustering.html,我明白我需要設置com.hazelcast.web.WebFilter過濾器,並且此過濾器將裝飾原始HttpSession以將會話數據存儲在Hazelcast緩存中。修改其屬性時是否需要鎖定HazelcastHttpSession實例?

我的問題是我是否需要在HazelcastHttpSession實例上放置一個鎖(分佈式鎖),當我修改它的屬性時,就像我爲原始HttpSession實例所做的那樣。

如果我要鎖定HazelcastHttpSession實例,我打算使用Hazelcast分佈式鎖定,獲取分佈式鎖定的關鍵是Session id。請參閱我的示例代碼:

HazelcastInstance hz = Hazelcast.newHazelcastInstance(cfg); 
Lock session_lock = hz.getLock(SessionID); 

session_lock .lock(); 
try { 
    // Modify session data 
} finally { 
    session_lock .unlock(); 
} 

我的應用程序可能有10K活躍用戶在同一時間,因此應用程序可能需要在同一時間從Hazelcast獲得10K分佈式鎖實例。

我的問題是榛可以一次創建太多(10K)分佈式鎖嗎? Hazel分佈式鎖的任何限制?文檔http://hazelcast.org/docs/latest/manual/html/lock.html沒有提及任何內容。

謝謝你的任何意見。

回答

1

您不需要鎖定對象。 Hazelcast數據結構通過設計是螺紋安全的。但是,您可以設置延遲寫入屬性,以便在請求完成後寫入所有值。如果在處理請求時拋出異常,它們將不會被寫入。 如果您未設置延遲寫入,則所有值都立即存儲在分佈式會話中。

+0

謝謝Noctarius。如果我們想在一個鎖定事務中執行諸如getAttribute,setAttribute之類的調用,我們仍然需要一個分佈式鎖。是對的嗎? – Loc

+0

什麼是鎖定交易? – noctarius

+0

鎖定跨getAttribute和setAttribute等一些調用。 – Loc

相關問題