我计划在现有的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));
}
发布于 2010-05-25 23:08:35
根据一位JBoss开发人员的说法,英飞凌目前还不支持这样的功能。您应该在Infinispan issue tracker中记录一个增强请求,以便其他人可以对其进行投票(我会的)。
也就是说,如果您现在需要此功能,一种变通方法是扩展AbstractDelegatingCache,并覆盖get
和put
方法以添加此功能。你可以使用你自己的复制策略,或者看看EHCache是如何做到这一点的。
此外,如果您有进一步的问题,可以考虑Infinispan forum,因为您将从Infinispan社区获得更多观点。
发布于 2011-06-02 17:46:10
Infinispan确实支持copyOnRead/copyOnWrite,尽管实际格式是不可插拔的。配置元素是Infinispan4.x中的和Infinispan5.x中的。对象使用可插拔的Marshaller框架进行序列化,该框架用于所有形式的编组,包括通过网络和存储到磁盘的RPC调用。
发布于 2013-11-12 01:31:29
我相信只有当对象需要序列化时,storeAsBinary
才会生效,这意味着当调用put
操作时,所有者不是当前节点。
这也意味着,如果key 0
的所有者不是当前节点,则问题中的测试用例可以通过,但如果是单节点环境,则测试用例仍然会失败。
https://stackoverflow.com/questions/2905587
复制相似问题