控制Ehcache不缓存查询中的零记录

时间:2016-08-11 06:03:23

标签: ehcache mybatis

我正在使用带有ehcache的mybatis来缓存查询结果以避免DB命中频率。我的问题是:如果select查询返回零记录,则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>

1 个答案:

答案 0 :(得分:0)

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

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

但是当您的查询返回n条记录,缓存,然后添加其他记录时,您将面临完全相同的问题......但查询仍会返回n结果而不是{{1} }。

我建议查看mybatis为缓存失效提供的内容。