开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情
一级缓存
-
默认启动本地缓存,对一个对话中的数据进行缓存,作用域在sqlsession。
-
运行过程:运行 sql,将结果存储到高速缓存中,下次运行同样 sql 直接从高速缓存中读取。
-
如果运行了新增、修改、删除,缓存被清除
二级缓存
-
默认不启动二级缓存,二级缓存是 mapper 级别,是 SqlSessionFactory 对象的缓存。
-
一个映射 xml 中的 sql 执行后放入缓存区域,下一次执行时,从缓存中取结果。
实现方式
-
缓存不需要配置,默认开启;
-
缓存实现:
- 在主配置文件中配置;
<setting name="cacheEnabled" value="true"/>- 在xml中配置
<cache/>- 在sql语句中使用
<select id="findById" resultType="com.example.domain.User" parameterType="INT" useCache="true"> SELECT * FROM USER WHERE ID = #{ID} </select> -
SpringBoot 中实现:
- 在properties中配置:
开启mybatis的二级缓存 mybatis.configuration.cache-enabled=true
- 在xml中开启
<!-- 开启二级缓存 --> <cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"> </cache>
说明:
eviction: 回收策略 LRU 最近最少使用的,移除最长时间不被使用的对象,这是默认值
FIFO 先进先出,按对象进入缓存的顺序来移除它们
SOFT 软引用,移除基于垃圾回收器状态和软引用规则的对象
WEAK 弱引用,更积极的移除基于垃圾收集器状态和弱引用规则的对象
flushInterval: 刷新间隔,以毫秒为单位,100000表示每100秒刷新一次缓存。不设置的话,则每次调用语句时刷新。
readOnly: 只读属性可以被设置为true后者false。只读的缓存会给所有调用者返回缓存对象的相同实例,因此这些对象不能被修改,这提供了很重要的性能优势。可读写的缓存会通过序列化返回缓存对象的拷贝,这种方式会慢一些,但很安全,因此默认为false。
size: 可以被设置为任意的正整数,要记住缓存的对象数目和运行环境的可用内存资源数目,默认1024
结束
本文如有错误,欢迎大家指正批评。