我正在使用带有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>
答案 0 :(得分:0)
这看起来像是一个经典的失效问题。
无论创建什么逻辑,附加记录都必须负责使缓存的查询失效。当没有记录作为查询结果返回并添加一条应该匹配的记录时,您会非常明显地看到问题。
但是当您的查询返回n
条记录,缓存,然后添加其他记录时,您将面临完全相同的问题......但查询仍会返回n
结果而不是{{1} }。
我建议查看mybatis为缓存失效提供的内容。