MyBatis一级缓存与二级缓存


一级缓存与二级缓存

Mybatis缓存
缓存是一般的 ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力,缓存的重要性是不言而喻的。Mybatis 会将相同查询条件的 SQL 语句的查询结果存储在内存或者某种缓存介质当中,当下次遇到相同的查询 SQL 时候不在执行该 SQL,而是直接从缓存中获取结果,减少服务器的压力,尤其是在查询越多、缓存命中率越高的情况下,使用缓存对性能的提高更明显。
MyBatis 缓存方式分为一级缓存和二级缓存,同时也可配置关于缓存设置。
一级缓存是将结果缓存在SqlSession对象中,二级缓存是存储在SqlSessionFactory对象 中。默认情况下,MyBatis开启一级缓存,没有开启二级缓存。
当数据量大的时候可以借助一些第三方缓存技术来协助保存 Mybatis 的二级缓存数据。

1 一级缓存的使用

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
一级缓存也叫本地缓存,MyBatis的一级缓存是在会话(SqlSession)层面进行缓存的。 MyBatis 的一级缓存是默认开启的,不需要任何的配置。

1.1一级缓存的生命周期

MyBatis 在开启一个数据库会话时,会创建一个新的 SqlSession 对象,SqlSession 对象中 会有一个新的 Executor 对象。Executor 对象中持有一个新的 PerpetualCache 对象;当会 话结束时,SqlSession 对象及其内部的 Executor 对象还有 PerpetualCache 对象也一并释 放掉。
如果SqlSession调用了 close()方法,会释放掉一级缓存 PerpetualCache 对象,一级缓存 将不可用。
如果SqlSession调用了 clearCache(),会清空 PerpetualCache 对象中的数据,但是该对象 仍可使用。
SqlSession 中执行了任何一个 update 操作(update()、delete()、insert()) ,都会清空 PerpetualCache 对象的数据,但是该对象可以继续使用。

1.2 如何判断两次查询是完全相同的查询

Mybatis 认为,对于两次查询,如果以下条件都完全一样,那么就认为它们是完全相同的两次查询。
传入的 statementId。
查询时要求的结果集中的结果范围。
这次查询所产生的最终要传递给 Preparedstatement 的 Sql 语句字符串。
传递的参数值

2 二级缓存的使用

MyBatis 的二级缓存是 Application 级别的缓存,它可以提高对数据库查询的效率,以提 高应用的性能。二级缓存是 SqlSessionFactory 上的缓存,可以是由一个 SqlSessionFactory 创建的不同的 SqlSession 之间共享缓存数据。默认并不开启。
SqlSession 在执行 commit()或者 close()的时候将数据放入到二级缓存。 Sqlsession 共享二级缓存

2.1二级缓存的配置方式

二级缓存的开启需要进行配置,实现二级缓存的时候,MyBatis 要求缓存的POJO必须是可序列化的, 也就是要求实现Serializable接口。在映射配置文件中配置就可以 开启缓存了。

2.2二级缓存特点

映射语句文件中的所有select语句将会被缓存。
映射语句文件中的所有insert、update 和 delete 语句会刷新缓存。
二级缓存是以 namespace 为单位的,不同 namespace 下的操作互不影响
如果在加入标签的前提下让个别 select 元素不使用缓存,可以使用 useCache 属性,设置为 false。
缓存会使用默认的Least Recently Used(LRU,最近最少使用的)算法来收回。
根据时间表,比如No Flush Interval,(CNFI 没有刷新间隔),缓存不会以任何时间顺序 来刷新。
缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用
缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全的被调用者修改,不干扰其他调用者或线程所做的潜在修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值