【问题标题】:Controlling Ehcache to not cache the zero record from query控制 Ehcache 不缓存来自查询的零记录
【发布时间】:2016-12-17 17:18:15
【问题描述】:

我正在使用带有 ehcache 的 mybatis 来缓存查询结果以避免 DB 命中频率。我的问题是:如果选择查询返回零记录,那么 ehcache 会缓存该记录并始终返回零作为结果,即使在此查询执行后插入的有效记录也是如此。

如果查询仅返回零记录,任何人都可以建议如何配置 ehcache 以不缓存。

<mapper namespace="org.test">
<cache type="org.mybatis.caches.ehcache.EhcacheCache">
    <property name="eternal" value="false" />
    <property name="maxEntriesLocalHeap" value="10000"/>
    <property name="maxEntriesLocalDisk" value="10000000"/>
    <property name="timeToIdleSeconds" value="3600" />
    <property name="timeToLiveSeconds" value="3600" />
    <property name="memoryStoreEvictionPolicy" value="LRU" />
    <property name="statistics" value="true" />
</cache> 

<select id="userInfo" parameterType="map" resultMap="userInfoList" useCache="true">
    SELECT USERNAME,USERID FROM TEST_TABLE
</select>

【问题讨论】:

标签: ehcache mybatis


【解决方案1】:

这看起来像是一个经典的失效问题。

无论创建什么逻辑,附加记录都必须负责使缓存查询无效。当没有记录作为查询结果返回并且您添加一条应该匹配的记录时,您会非常明显地看到问题。

但是当您的查询返回 n 记录、被缓存、然后添加另一条记录时,您将面临完全相同的问题......但查询仍将返回 n 结果而不是 n+1

我建议查看 mybatis 提供的缓存失效功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-17
    • 2017-03-06
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2011-03-31
    • 1970-01-01
    相关资源
    最近更新 更多