【问题标题】:Hazelcast Map is lockedHazelcast 地图已锁定
【发布时间】:2012-09-26 06:32:25
【问题描述】:

我们使用 Hazelcast 2.3.1,在我们的 hazelcast.xml 配置文件中,我们 对 Hazelcast IMap 使用 write behind:

 <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 的HazelcastObjectPersister 在 Hazelcast 调用 storeAll() 时保留对象。
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 运行此地图并获取 应该存储在持久化器的 storeAll 方法中的对象 类,地图被锁定几秒钟,因此放入此地图持续 这次。这个问题有解决办法吗?

【问题讨论】:

    标签: java hazelcast


    【解决方案1】:

    这是一个 Hazelcast 问题并由以下人员修复:https://github.com/hazelcast/hazelcast/issues/293

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 2017-09-03
      • 2023-03-31
      相关资源
      最近更新 更多