- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用的是 Hazelcast IMap,我在其中使用 EntryProcessor 更新了很多值。与此同时,其他线程也在调用get()。如果可能的话,我想避免所有不必要的反序列化。但似乎即使在使用单个节点时它仍然在反序列化。
有什么办法可以避免这种情况吗?我已将 Map 和近缓存的内存格式设置为 OBJECT。我还将 cache-local-entries 设置为 true,但仍然没有成功。我正在使用 Hazelcast 3.12。
这是我的示例代码:
public class HazelcastSerializationTest {
static int readCount = 0;
private String mapName = "map1";
private HazelcastInstance createHazelcast() {
Config config = new Config("HazelcastSerializationTest");
config.addMapConfig(new MapConfig(mapName)
.setInMemoryFormat(InMemoryFormat.OBJECT)
.setNearCacheConfig(new NearCacheConfig(mapName)
.setInMemoryFormat(InMemoryFormat.OBJECT)
.setCacheLocalEntries(true)));
config.getNetworkConfig().getJoin()
.getMulticastConfig().setEnabled(false);
return Hazelcast.newHazelcastInstance(config);
}
@Test
public void testEntry() {
HazelcastInstance instance = createHazelcast();
IMap<Integer, DataObject> map = instance.getMap(mapName);
map.put(1, new DataObject(0));
for (int i = 0; i < 100; i++) {
map.executeOnKey(1, new NothingProcessor());
map.get(1);
}
assertEquals(2, readCount);
}
}
class NothingProcessor extends AbstractEntryProcessor<Integer, DataObject> {
@Override
public Object process(Map.Entry<Integer, DataObject> entry) {
entry.setValue(new DataObject(entry.getValue().getValue() + 1));
return null;
}
}
class DataObject implements Externalizable {
private int value;
public DataObject(int value) {
this.value = value;
}
public DataObject() { }
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(value);
}
@Override
public void readExternal(ObjectInput in) throws IOException {
HazelcastSerializationTest.readCount++;
value = in.readInt();
}
}
我错过了什么吗?我希望这只是从近缓存中返回真实对象。反序列化似乎是不必要的。我还应该提到,在我的场景中,键和值对象是不可变的。
最佳答案
当您通过 EntryProcessor 更新条目时,它还会使 NearCache 中的键值无效。因此,无论何时您对该键执行 get()
,都会从服务器获取新值并存储在 NearCache 中。并通过 get()
从服务器获取 = 序列化 + 反序列化,无论内存格式类型如何。
关于java - 让 Hazelcast 在使用 EntryProcessor 时停止反序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60012442/
我注意到 EntryProcessor 接口(interface)实现了 Serializable。我在 map 中有一个值,我想使用 executeOnKey 方法更新它,但出于显而易见的原因,我宁
我注意到 EntryProcessor 接口(interface)实现了 Serializable。我在 map 中有一个值,我想使用 executeOnKey 方法更新它,但出于显而易见的原因,我宁
我正在使用 hazelcast 缓存版本 3.11.2 来存储和操作 IMap 中的值。 对于 IMap 操作,我使用从 AbstractEntryProcessor 扩展的 EntryProcess
我们正在尝试找出在不使用悲观锁定的情况下使用 Hazelcast 的 IMap 的最佳方法。 EntryProcessor 似乎是正确的选择,但是我们需要应用两种不同类型的操作:当 containsK
我正在尝试实现使用 Coherence transient 缓存的业务功能。 我计划依赖的功能之一是在将项目放入缓存时提供(可配置的)生存时间时自动逐出缓存条目。 NamedCache 接口(inte
我使用的是 Hazelcast IMap,我在其中使用 EntryProcessor 更新了很多值。与此同时,其他线程也在调用get()。如果可能的话,我想避免所有不必要的反序列化。但似乎即使在使用单
我需要在 EntryProcessor.process 方法中获取当前的 hazelcast 实例。 我需要在 process 方法中向主题发送消息。 如何获取实例? 问候 最佳答案 您可以通过在 E
HZ版本:3.5.3 我在 IMap.unlock(key) 中遇到性能问题大约需要 4-5 秒才能完成执行。场景如下: 我有一个员工列表 IMap哪些商店companyId对照员工列表 ( Arra
我正在尝试使用 EntryProcessor 为我们的应用程序设置 Hazelcast 的代码。为了分析为什么 EntryProcessor 的代码在我们的应用程序中不起作用,我尝试在本地计算机上设置
我是一名优秀的程序员,十分优秀!