MyBatis二级缓存

53 阅读2分钟

​携手创作,共同成长!这是我参与「掘金日新计划·8 月更文挑战」的第25天,点击查看活动详情

二级缓存

二级缓存是全局缓存。作用域超出会话范围,可以由所有sqlsessions共享。

第一级缓存缓存SQL语句,第二级缓存缓存结果对象。

二级缓存的配置

1)MyBatis的全局缓存配置需要在 mybatis-config.xml的settings元素中设置,代码如下。

<settings>    <setting name="cacheEnabled" value="true" /></settings>

2)在映射器文件(如webmapper.XML)中设置缓存。默认情况下不启用缓存。应该注意的是,辅助缓存的作用域是映射器的命名空间,也就是说,只有命名空间(com.tt.webItemApper)中的查询才能共享此缓存。代码如下。。

<mapper namescape="com.tt.WebsiteMapper">    <!-- cache配置 -->    <cache        eviction="FIFO"        flushInterval="60000"        size="512"        readOnly="true" />    ...</mapper>

以上属性说明如下。

属性说明
eviction代表的是缓存回收策略,目前 MyBatis 提供以下策略。- LRU:使用较少,移除最长时间不用的对象;
  • FIFO:先进先出,按对象进入缓存的顺序来移除它们;
  • SOFT:软引用,移除基于垃圾回收器状态和软引用规则的对象;
  • WEAK:弱引用,更积极地移除基于垃圾收集器状态和弱引用规则的对象。 | | flushInterval | 刷新间隔时间,单位为毫秒,这里配置的是 100 秒刷新,如果省略该配置,那么只有当 SQL 被执行的时候才会刷新缓存。 | | size | 引用数目,正整数,代表缓存最多可以存储多少个对象,不宜设置过大。设置过大会导致内存溢出。这里配置的是 1024 个对象。 | | readOnly | 只读,默认值为 false,意味着缓存数据只能读取而不能修改,这样设置的好处是可以快速读取缓存,缺点是没有办法修改缓存。 |

3)在 mapper 文件配置支持 cache 后,如果需要对个别查询进行调整,可以单独设置 cache,代码如下。

<select id="getWebsiteList" resultType="com.tt.po.Website" usecache="true">    ...</select>

对于 MyBatis 缓存仅作了解即可,因为面对一定规模的数据量,内置的 Cache 方式就派不上用场了,并且对查询结果集做缓存并不是 MyBatis 所擅长的,它专心做的应该是 SQL 映射。对于缓存,采用 OSCache、Memcached 等专门的缓存服务器来做更为合理。

大家点赞、收藏、关注、评论啦 、打卡 文章 更新 268/  365天