修改其属性时是否需要锁定HazelcastHttpSession实例?

时间:2014-04-11 13:26:25

标签: java java-ee cluster-computing httpsession hazelcast

我计划将Hazelcast用于Http会话群集。我阅读了这个文档 - http://hazelcast.org/docs/latest/manual/html/httpsessionclustering.html,我知道我需要设置com.hazelcast.web.WebFilter过滤器,这个过滤器将装饰原始的HttpSession以在Hazelcast缓存中存储会话数据。

我的问题是当我修改其属性时,我必须在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分布式锁定实例。

我的问题是Hazel可以一次创建太多(10K)分布式锁吗? Hazel分布式锁的任何限制?文档http://hazelcast.org/docs/latest/manual/html/lock.html没有提及任何内容。

感谢您的任何评论。

1 个答案:

答案 0 :(得分:1)

您不需要锁定对象。 Hazelcast数据结构在设计上是线程安全的。但是,您可以设置deferred-write属性,以便在请求完成后写入所有值。如果在处理请求时抛出异常,则不会写入它们。 如果您没有设置延迟写入,则所有值都会立即存储在分布式会话中。