我计划将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没有提及任何内容。
感谢您的任何评论。
答案 0 :(得分:1)
您不需要锁定对象。 Hazelcast数据结构在设计上是线程安全的。但是,您可以设置deferred-write属性,以便在请求完成后写入所有值。如果在处理请求时抛出异常,则不会写入它们。 如果您没有设置延迟写入,则所有值都会立即存储在分布式会话中。