Hazelcast地图已被锁定

时间:2012-09-26 06:32:25

标签: java hazelcast

我们在hazelcast.xml配置文件中使用Hazelcast 2.3.1 使用写后面的Hazelcast IMap:

 <map name="HazelcastObjectOperations.objectMap">
         <backup-count>1</backup-count>
         <map-store enabled="true">
             <class-name>persister.HazelcastObjectPersister</class-name>
             <write-delay-seconds>10</write-delay-seconds>
         </map-store>
 </map>
 <properties>
      <property name="hazelcast.map.cleanup.delay.seconds">5</property>
 </properties>

我们有两个班级

  1. HazelcastObjectOperation持有地图并且是 用来把物品放进去。
  2. 使用扩展MapStore的
  3. HazelcastObjectPersister 在Hazelcast调用storeAll()时保持对象。
  4.     public class HazelcastObjectOperation
        {
    
             protected final IMap<Long, MyHzcObj> objectMap;
             private final HazelcastInstance instance;
    
             public HazelcastObjectOperation()
             {
                this.instance = Hazelcast.getDefaultInstance();
                this.objectMap = this.instance.getMap(
                                   "HazelcastObjectOperations.objectMap" );
             }
    
             public void save( final MyHzcObj object )
             {
                long start = System.currentTimeMillis();
                IdGenerator generator = Hazelcast.getIdGenerator("generator");
                this.objectMap.put( generator.newId(), object );
                long end = System.currentTimeMillis();
             }
        }
    

    问题是当Hazelcast通过这张地图并获取时 应该存储在persister的storeAll方法中的对象 类,地图被锁定几秒钟,所以放入此地图持续 这次。有没有解决这个问题的方法?

1 个答案:

答案 0 :(得分:3)

这是一个Hazelcast问题,由https://github.com/hazelcast/hazelcast/issues/293

修复

顺便说一下: 请注意,如果您不需要旧值,最好使用set()代替put()。该问题与put()尝试在定义mapstore时加载旧值有关。 set()不会尝试加载旧值,因此它更快更干净。