Mybatis入门学习三

缓存

因为查询要连接数据库,很耗性能,所以可以把临时数据缓存在内存中。在高并发的情况下可以减少去访问磁盘的次数,而只需要访问内存即可。

什么数据比较适合用缓存:经常查询且不经常改变的数据。

缓存失效的情况

1.查询不同的东西
2.增删改操作,可能会改变原来的数据,所以必定会刷新缓存。
3.查询不同的Mapper.xml
4.手动清理缓存

一级缓存

一级缓存是默认开启的,就是本地缓存,但是只在一次SqlSession中有效,也就是sqlsession.open()和sqlSession.close()这个区间段有效。

一级缓存的原理:就是一个Map

二级缓存

二级缓存即是全局缓存,即定义了<cache/>的mapper.xml,整个namespace都会共享该缓存。

工作机制:

  • 一个会话查询一条数据,把该数据存入一级缓存中;
  • 如果当前会话关闭了,一级缓存就没了,就把它存入二级缓存中、
  • 新的会话查询信息就可以从二级缓存中获取内容
  • 不同的mapper存在的数据在不同的map中。

步骤:

  • 开启全局缓存 mybatis-config.xml中
<setting name="cacheEnabled" value="true"/>
  • 开启二级缓存 mapper.xml中
 <!-- 在当前mapper.xml中使用二级缓存,也可以给它设置一些参数 -->
    <cache/>
 <!-- 设置参数之后 -->
 	<cache eviction="FIFO"
		   flushInterval="6000"
		   size="512"
		   readOnly="true"/>

如果某个方法不想用缓存,可以把useCache设置为false,如:

<select id="queryUserById" resultType="user" useCache="false">
 	select * from user where id = #{id}
</select>
  • 测试的问题:

1 . 要把实体类序列化,否则无法缓存。

2 . 所有的数据都会先存在一级缓存中,只有当会话提交或者关闭的时候才会提交到二级缓存中

查询缓存顺序

先看二级缓存有没有,再看一级缓存有没有,最后才查数据库。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值