携手创作,共同成长!这是我参与「掘金日新计划·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天