当前位置:  开发笔记 > 编程语言 > 正文

Hazelcast地图同步

如何解决《Hazelcast地图同步》经验,为你挑选了1个好方法。

我试图在我的应用程序中使用Hazelcast实现分布式缓存.我正在使用Hazelcast IMap.我遇到的问题是每次从地图中获取值并更新值时,我都需要put(key, value)再次执行.如果我的值对象有10个属性而我必须更新所有10个属性,那么我必须调用put(key, value)10次​​.就像是 -

IMap mapEmployees = hz.getMap("employees");
Employee emp1 = mapEmployees.get(100);
emp1.setAge(30);
mapEmployees.put(100, emp1);
emp1.setSex(“F”);
mapEmployees.put(100, emp1);
emp1.setSalary(5000);
mapEmployees.put(100, emp1);

如果我不这样做,在同一个Employee对象上运行的某个其他节点将更新它,最终结果是employee对象未同步.是否有任何解决方案可以避免多次显式调用put?在a中ConcurrentHashMap,我不需要这样做,因为如果我更改了对象,地图也会更新.



1> Drew..:

从版本3.3开始,您将需要使用EntryProcessor:

你真正想要做的是构建EntryProcessor并使用它来调用它 mapEmployees.executeOnKey( 100, new EmployeeUpdateEntryProcessor( new ObjectContainingUpdatedFields( 30, "F", 5000 ) );

这样,Hazelcast处理锁定该Employee对象的键上的映射,并允许您以process()原子方式运行EntryProcessor 方法中的任何代码,包括更新映射中的值.

因此,您EntryProcessor需要使用自定义构造函数来实现,该构造函数接受包含您要更新的所有属性的对象,然后在process()构造最终Employee对象中,该对象将最终出现在地图中并执行entry.setValue().不要忘记为序列化对象创建一个新StreamSerializerEmployeeUpdateEntryProcessor,Employee这样就不会遇到java.io序列化问题.

资料来源:http: //docs.hazelcast.org/docs/3.5/manual/html/entryprocessor.html

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有