我们正在使用Hazelcast 2.3.1,在我们的hazelcast.xml配置文件中,我们使用写后面的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>
Run Code Online (Sandbox Code Playgroud)
我们有两节课
HazelcastObjectOperation 它保存地图并用于将对象放入其中.HazelcastObjectPersister扩展MapStore用于在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();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当Hazelcast运行此映射并获取应该存储在persister类的storeAll方法中的对象时,映射会被锁定几秒钟,因此放入此映射会持续一次.这个问题有什么解决方案吗?
这是 Hazelcast 问题,已修复:https ://github.com/hazelcast/hazelcast/issues/293
顺便说一句:请注意,如果您不需要旧值,则最好使用set()旧值。put()该问题与put()如果定义了映射存储则尝试加载旧值有关。set()不会尝试加载旧值,因此它更快更干净。
| 归档时间: |
|
| 查看次数: |
1528 次 |
| 最近记录: |