我在整个应用程序中使用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是否支持?
中号
答案 0 :(得分:1)
ehcache中有一个属性( copyOnRead ),可以为此设置为true。 缓存配置如下所示:
<cache name="copyCache"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="5"
timeToLiveSeconds="10"
overflowToDisk="false"
copyOnRead="true"
copyOnWrite="true">
</cache>