【问题标题】:EHCache change on original element原始元素上的 EHCache 更改
【发布时间】:2015-06-30 14:22:08
【问题描述】:

我在 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 不是一个新对象,而只是对缓存中对象的引用。

你知道怎么做吗?

【问题讨论】:

    标签: java ehcache


    【解决方案1】:

    默认情况下,您的元素将作为引用存储在 EHCache 中,直到出现文件写入或其他复制。为防止发生这种情况,您可以在缓存配置中使用“copyOnWrite”/“copyOnRead”属性。因此,对象将在您的 put/get 操作中被复制,并且不允许发生任何变化。

    Ehcache documentation for reference

    【讨论】:

      【解决方案2】:

      (这可能不是理想的解决方案,只是提供另一种选择)

      添加到@Alexey 的答案.. 如果您只有少数可能发生突变的场景,您可以简单地选择在从 EHCache 检索后克隆对象。这可能会节省一些每次复制它的开销。

      【讨论】:

      • 感谢朱利安的想法。我更改了配置,因为从 ehcache 读取对象后我不需要更改对象。
      猜你喜欢
      • 1970-01-01
      • 2014-05-30
      • 2017-12-12
      • 2022-07-07
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      相关资源
      最近更新 更多