Mybatis缓存

 

缓存作用:

  • 减少IO,提高系统性能。
  • mybatis提供了一级缓存和二级缓存

 

一级缓存:

  • 一级缓存是sqlsession级别的缓存,同一个sqlsession中的缓存共享,不同sqlsession互不影响。
  • sqlsession对象通过使用HashMap来缓存数据。

工作原理:

  • 用户发起sql查询时,如果缓存中没有就从数据库查找,并将查询结果存储到一级缓存中。
  • 在同一个sqlsession中,再次发起sql查询时,如果缓存中存在,就直接从缓存中获取信息,不去数据库查找(这样就减少磁盘IO了)
  • 如果中途其他sqlsession执行了commit操作(插入,更新,删除),就会清空sqlsession中的一级缓存,避免脏读。

示例:

1、一级缓存是mybatis默认缓存(无须设置)

2、配置日志(为了看到sql查询语句)

3、对同一个员工在一个sqlsession中进行三次查询

4、可以看到,sql语句只执行了一次,第二次第三次查询时,在一级缓存中查找到了,就不去数据库查了。

一级缓存失效:

  • sqlsession对象不同
  • 查询条件不同,即缓存中找不到
  • 两次查询之间进行插入删除更新等操作
  • 手动清除了一级缓存

 

二级缓存:

  • 二级缓存是namespace级别的缓存,多个sqlsession共享二级缓存。

工作原理:

示例:

1、在config.xml中开启二级缓存

<settings> 
    <!--开启二级缓存--> 
    <setting name="cacheEnabled" value="true"/>
</settings>

   在具体的mapper.xml中开启二级缓存

<!--开启本Mapper的namespace下的二级缓存--> 
<cache eviction="LRU" flushInterval="10000"/>
cache 属性的简介:
eviction 回收策略(缓存满了的淘汰机制),目前 MyBatis 提供以下策略。
  1.  LRULeast Recently Used,最近最少使用的,最长时间不用的对象
  2.  FIFOFirst In First Out,先进先出,按对象进入缓存的顺序来移除他们
  3.  SOFT,软引用,移除基于垃圾回收器状态和软引用规则的对象
  4.  WEAK,弱引用,更积极的移除基于垃圾收集器状态和弱引用规则的对象。这里采用的是LRU, 移除最长时间不用的对象。
flflushInterval: 刷新间隔时间,单位为毫秒。
  1. 这里配置的是100秒刷新,如果你不配置它,那么当SQL被执行的时候才会去刷新缓存。
size: 引用数目。
  1. 一个正整数,代表缓存最多可以存储多少个对象,不宜设置过大。设置过大会导致内存溢出。(这里配置的是1024个对象)
readOnly: 只读。
  1. 意味着缓存数据只能读取而不能修改,这样设置的好处是我们可以快速读取缓存,缺点是我们没有办法修改缓存,他的默认值是false,不允许我们修改

2、使用不同的sqlsession进行两次查询(注意:第一次的查询要commit之后,二级缓存中才存在部门信息,否则部门信息只存在session1的一级缓存中)

3、可以看到session1查询时执行了一次sql,session2查询的时候直接从二级缓存中取数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值