我在java项目中使用EHCache。我在这段代码上遇到了问题。我的目标在此时被缓存了!
Element lElem = cacheManager.get("KEY");
if (lElem != null) {
// Get my cached objects
lLMyVO = (List<MyVO>) lElem.getObjectValue();
}else{
// Do something to set element
}
// Add some elements on lLMyVO list :
for (MyVO lAnotherMyVO : lAnotherList) {
lLMyVO .add(lMyVO );
}
此时,我的lLMyVO
列表中包含lAnotherList
个元素!那没关系。但是在我的EHCache对象中添加了lAnotherList
的元素!并且不行,我不想更改缓存。
似乎lLMyVO
它不是一个新对象,而只是对缓存中对象的引用。
你知道怎么做吗?
答案 0 :(得分:3)
默认情况下,您的元素将作为参考存储在EHCache中,直到出现文件写入或其他复制。为了防止您使用“copyOnWrite”&#39; copyOnRead&#39;缓存配置中的属性。因此,对象将被复制到您的put / get操作中,并且不允许任何突变。
答案 1 :(得分:0)
(这可能不是理想的解决方案,仅提供另一种选择)
添加到@Alexey的答案.. 如果您只有几个可能发生突变的场景,您可以在从EHCache检索后选择克隆该对象。这可以节省每次复制它的一些开销。