0

我正在将 Oracle Coherence 缓存与 Java 一起使用,但遇到了问题。当我将某些东西放入缓存(如地图)并使用 get 调用将其取回然后修改对象(例如,向地图添加值)时,修改后的值不会反映在缓存中。即,如果我再次发出 get,我将得到相同的旧对象。ehcache 或 dynacache 不会发生这种情况。

我知道我们可以将修改后的地图写回缓存,但我想知道我们是否可以在 coherence config xml 中进行一些配置。

示例代码:

ConcurrentHashMap<String, String> myMap = new ConcurrentHashMap<String, String>();
myMap.put("Hello", "World");
cache.put("myMap", myMap);
ConcurrentHashMap<String, String> myExMap = (ConcurrentHashMap<String, String>)cache.get("myMap");
myExMap.put("Once", "More");
ConcurrentHashMap<String, String> myFinMap = (ConcurrentHashMap<String, String>) cache.get("myMap");
System.out.println(myFinMap);

执行后,myFinMap 仍然只有一个条目。

4

2 回答 2

1

可能每次修改对象都得把对象放到缓存中(我猜是因为它是序列化的吧?)

于 2010-07-21T12:10:51.917 回答
0

您必须将对象放回缓存中。从 Coherence 缓存中获取的对象未包装在查找修改并与缓存同步的 Coherence 类中。

于 2010-09-27T15:03:45.810 回答