我计划将缓存解决方案实施到现有的Web应用程序中。没有什么复杂的:基本上是一张并发地图,该地图支持磁盘和自动驱逐。聚集缓存可能是将来需要的,但现在不是。

我喜欢Ehcache的CopyOnread和copyOnwrite功能,因为这意味着我不必在修改我从缓存中取出的东西之前手动克隆东西。现在我已经开始看了 Infinispan, ,但是我在那里没有发现任何等效的东西。它存在吗?

即,以下单元测试应通过:

@Test
public void testCopyOnWrite() {
    Date date = new Date(0);
    cache.put(0, date);
    date.setTime(1000);
    date = cache.get(0);
    assertEquals(0, date.getTime());
}

@Test
public void testCopyOnRead() {
    Date date = new Date(0);
    cache.put(0, date);
    assertNotSame(cache.get(0), cache.get(0));
}
有帮助吗?

解决方案

根据JBOSS开发人员的说法,Infinispan尚未支持此功能。您应该在 Infinispan问题跟踪器, ,以便其他人可以对此进行投票(我会)。

话虽如此,如果您需要此功能 现在, ,解决方法是扩展 AbstractDelegatingCache, ,覆盖 getput 添加此功能的方法。您可以使用自己的副本策略,也可以查看Ehcache如何为灵感而做。

另外,您可能会考虑 Infinispan论坛 如果您还有其他疑问,因为您将对Infinispan社区有更多观点。

其他提示

Infinispan 支持CopyOnread/copyOnwrite,尽管实际格式不可插入。配置元素是 LazyDeSerialization 在Infinispan 4.X和 Storeasbinary 在Infinispan 5.x中对象使用可插入的卫生架框架进行序列化,该框架用于所有形式的编组,包括通过网络和磁盘存储的RPC调用。

我相信 storeAsBinary 仅当需要序列化时才能生效,这意味着 put 调用操作,所有者不是当前节点。

这也意味着如果钥匙的所有者,问题中的测试值可能会通过 0 不是当前节点,但是如果它是单个节点环境,它仍然会失败。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top