MyBatis二级缓存

举报
Java李杨勇 发表于 2022/08/31 20:41:38 2022/08/31
【摘要】 二级缓存二级缓存是全局缓存。作用域超出会话范围,可以由所有sqlsessions共享。第一级缓存缓存SQL语句,第二级缓存缓存结果对象。 二级缓存的配置1)MyBatis的全局缓存配置需要在 mybatis-config.xml的settings元素中设置,代码如下。<settings> <setting name="cacheEnabled" value="true" /></se...

二级缓存

二级缓存是全局缓存。作用域超出会话范围,可以由所有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天

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。