我计划使用Hazelcast进行Http会话集群。我读过这个文档-- http://hazelcast.org/docs/latest/manual/html/httpsessionclustering.html,我知道我需要设置com.hazelcast.web.WebFilter过滤器,这个过滤器将装饰原始的HttpSession,以便在Hazelcast缓存中存储会话数据。
我的问题是,当我修改HazelcastHttpSession实例的属性时,是否必须对它设置一个锁(分布式锁),就像对原始HttpSession实例那样。
如果我必须锁定HazelcastHttpSession实例,我计划使用Hazelcast分布式锁,获得分布式锁的关键是会话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 )分布式锁吗?文档http://hazelcast.org/docs/latest/manual/html/lock.html没有提到任何内容。
谢谢你的评论。
发布于 2014-04-11 14:22:19
你不需要锁定物体。黑兹尔广播数据结构是线程安全的设计。但是,您可以设置延迟写入属性,以便在请求完成后写入所有值。如果在处理请求时抛出异常,则不会写入它们。如果不设置延迟写入,则所有值都立即存储在分布式会话中。
https://stackoverflow.com/questions/23013944
复制相似问题