我正在使用带有Java的Oracle Coherence缓存,但我遇到了一个问题。当我在缓存中放入一些东西(如地图)并使用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仍然只有一个条目。
答案 0 :(得分:1)
也许每次修改它时都必须将对象放入缓存中(我猜是因为它是序列化的?)
答案 1 :(得分:0)
您必须将对象放回缓存中。从Coherence缓存获取的对象不包含在Coherence类中,该类查找修改并与缓存同步。