将EhCache对象存储为值而不是引用?

时间:2014-04-01 10:46:19

标签: caching ehcache

我在整个应用程序中使用EhCache,我偶然发现了一个问题。 我需要缓存“原始”数据(地图树和一些列表)。从缓存中检索后的缓存值意味着要进一步处理(一些元素被过滤掉,重新排序等)。

我的问题是我希望保持原始缓存值不变 - 因为它意味着用于某些“后期处理”。所以最终我想存储对象“值/深度克隆”而不是它的参考。

示例代码:

//create a List of Maps
List list = new ArrayList();

Map<String, String> map = new HashMap<String, String>();
map.put("key1", "v1");
map.put("key2", "v2");
list.add(map);

//add to cache
cache.put("cacheRegion", "list", list);

//now add a new element to list (2nd map)
list.add(new TreeMap());

//now remove 1 entry from the 1st Map
map = (Map<String, String>) list.get(0);
map.remove("key1");

list = (List) cache.get("cacheRegion", "list");

assertEquals("list should still have 1 element, despite adding new map after cache put", 1, list.size());

//check map
map = (Map<String, String>) list.get(0);
assertEquals("map should still contain 2 entries, as it was added to the cache", 2, map.size());

ehCache是​​否支持?

中号

1 个答案:

答案 0 :(得分:1)

ehcache中有一个属性( copyOnRead ),可以为此设置为true。 缓存配置如下所示:

<cache name="copyCache"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="5"
timeToLiveSeconds="10"
overflowToDisk="false"
copyOnRead="true"
copyOnWrite="true">
</cache>