我们在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>
我们有两个班级
HazelcastObjectOperation
持有地图并且是
用来把物品放进去。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通过这张地图并获取时 应该存储在persister的storeAll方法中的对象 类,地图被锁定几秒钟,所以放入此地图持续 这次。有没有解决这个问题的方法?
答案 0 :(得分:3)
这是一个Hazelcast问题,由https://github.com/hazelcast/hazelcast/issues/293
修复顺便说一下:
请注意,如果您不需要旧值,最好使用set()
代替put()
。该问题与put()
尝试在定义mapstore时加载旧值有关。 set()
不会尝试加载旧值,因此它更快更干净。