【问题标题】:ehcache - permanent cachingehcache - 永久缓存
【发布时间】:2016-05-12 20:49:11
【问题描述】:

我是 Ehcache 的初学者。

我正在尝试通过 mybatis xml 缓存 SQL 查询结果,而 ehcache 正在缓存查询及其结果,但是一旦操作完成,即使相同的 JVM 实例正在运行,它也会清除缓存的数据。

谁能建议如何将缓存存储在磁盘/内存中直到 JVM 终止?

mybatis-mapper.xml的代码sn-p

<cache type="org.mybatis.caches.ehcache.EhcacheCache">
    <property name="eternal" value="false" />
    <property name="maxElementsInMemory" value="100000" />
    <property name="timeToIdleSeconds" value="3600" />
    <property name="timeToLiveSeconds" value="3600" />
    <property name="memoryStoreEvictionPolicy" value="LFU" />
    <property name="statistics" value="true" />
</cache>

......

【问题讨论】:

    标签: java ehcache mybatis


    【解决方案1】:

    你要找的是Ehcache Persistence

    【讨论】:

    • 了解 Ehcache 持久性。是否可以在 mybatis 映射器 xml 中使用 而不是创建单独的 ehcache 配置文件。 ' --> 不是工作 '
    【解决方案2】:

    不是 MyBatis - Ehcache 桥的专家。但是从您的配置示例中,假设您永远不想过期,请进行以下更改:

    • eternal 属性设置为 true
    • 删除两个timeToXXX 属性

    这将确保永远不会触发到期。请注意,缓存仍然可以逐出以控制资源消耗。

    【讨论】:

    • 在没有 TTL、TTI 设置的情况下尝试将永恒设为“真”。但还是一样。刚刚完成了 ehcache 的调试,并注意到一旦提交完成并且由于缓存被清除,默认情况下会调用 TransactionalCache 中的 clear() 方法。是否有任何属性可以跳过此 clear() 方法?如果理解有误,请纠正我。 ' @Override public void clear() { reset(); clearOnCommit = true; }'
    【解决方案3】:

    为了解决这个问题,我们需要在您的 mapper.xml 中明确提及以下属性 1) useCache="true" 和 flushCache="false" 用于选择操作 2) 所有插入/更新/删除操作的flushCache="false"

    示例代码 sn-ps:-

    <select id="getTestData" parameterType="map" resultMap="testDtls"  useCache="true" flushCache="false" >
    
    <insert id="insertTestData" parameterType="map" flushCache="false" >
    

    【讨论】:

      猜你喜欢
      • 2014-12-31
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 2011-04-22
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多