代码之家  ›  专栏  ›  技术社区  ›  waxwing

相当于ehcache的copyonread和copyonwrite的infinispan

  •  4
  • waxwing  · 技术社区  · 14 年前

    我计划在现有的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));
    }
    
    3 回复  |  直到 11 年前
        1
  •  2
  •   Etienne Neveu    14 年前

    根据JBoss开发人员的说法,Infinispan还不支持这种功能。您应该将增强请求记录在 Infinispan issue tracker 以便其他人投票(我会)。

    也就是说,如果你需要这个功能 现在 解决方法是 AbstractDelegatingCache ,并重写 get put 方法来添加此功能。您可以使用自己的复制策略,或者看看ehcache是如何从中获得灵感的。

    此外,您可以考虑 Infinispan forum 如果你有更多的问题,因为你会有更多的意见,从中异教徒社区。

        2
  •  7
  •   Manik Surtani    13 年前

    无限大 支持copyonread/copyonwrite,尽管实际格式不可插入。配置元素是 lazyDeserialization 在Infinispan 4.x和 storeAsBinary 在InfiniSpan 5.x中,对象使用可插拔封送拆收器框架进行序列化,该框架用于所有形式的封送,包括通过网络和存储到磁盘的RPC调用。

        3
  •  0
  •   Changgeng    11 年前

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

    这也意味着,如果密钥的所有者 0 不是当前节点,但如果是单个节点环境,它仍然会失败。