我打算在現有的Web應用程序中實現緩存解決方案。沒有什麼複雜的:基本上是支持溢出到磁盤和自動驅逐的併發映射。集羣緩存可能在未來需要,但現在不是。Infinispan相當於ehcache的copyOnRead和copyOnWrite
我喜歡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));
}
謝謝。我相信正確地複製一個對象圖是一個難題(在一般情況下),這就是爲什麼我不想自己做。我會看看ehcache是如何做的,就像你所建議的那樣,但是我想我最終會在修改它之前手動複製我從緩存中取出的內容。 – waxwing 2010-05-25 15:44:22
我認爲EHCache用來複制對象的默認策略是使用Java的序列化機制......(序列化對象,然後反序列化它:你得到一個新的實例)。當然,速度很慢,只有在對象是可序列化的情況下才有效(但對於緩存對象通常是這種情況,因爲您經常想將它們寫在磁盤上......)。但是你是對的,複製對象圖是一個難題,我過去使用過Dozer,你也可以看看:http://stackoverflow.com/questions/1432764/any-tool-for-java-object- to-object-mapping – 2010-05-25 16:16:53
找到它:http://svn.terracotta.org/svn/ehcache/trunk/core/src/main/java/net/sf/ehcache/store/compound/SerializationCopyStrategy.java – 2010-05-25 16:22:41