广东省省建设厅网站,上海物流网站建设,网站备案服务码口令是什么意思,wordpress博客文章tdk设置目录
1. 一级缓存
2. 一级缓存失效的几种情况
3. 二级缓存
4.二级缓存失效的情况
5. 二级缓存的相关配置
6. 缓存的查询顺序 MyBatis 的缓存共分为一级缓存和二级缓存。
1. 一级缓存
一级缓存是 SqlSession 级别的#xff0c;通过同一个 SqlSession 查询到的数据会被缓…目录
1. 一级缓存
2. 一级缓存失效的几种情况
3. 二级缓存
4.二级缓存失效的情况
5. 二级缓存的相关配置
6. 缓存的查询顺序 MyBatis 的缓存共分为一级缓存和二级缓存。
1. 一级缓存
一级缓存是 SqlSession 级别的通过同一个 SqlSession 查询到的数据会被缓存下次查询相同的数据时会直接从缓存中查询不会从数据库重复访问。 2. 一级缓存失效的几种情况
1不同的 SqlSession 对应不同的缓存
2同一个 SqlSession 查询条件不同
3同一个 SqlSession 两次查询期间执行了任何一次增删改操作
4同一个 SqlSession 两次查询期间手动清空了缓存 3. 二级缓存
二级缓存是 SqlSessionFactory 级别的通过同一个 SqlSessionFactory 创建的 SqlSession 查询的结果会被缓存起来此后若再执行相同的查询语句结果就会从缓存中获取。
一个工厂可以创建多个 SqlSession因此它所创建的 SqlSession 查询到的数据都被会缓存到二级缓存中。
二级缓存是需要手动开启的需要以下几个条件
1在核心配置文件中设置全局属性 cacheEnabled true默认为 true其实也不需要设置
2在映射文件中设置标签cache/
3二级缓存必须要SqlSession 关闭或提交之后有效
4查询的数据所转换的实体类类型必须实现序列化的接口 4.二级缓存失效的情况
二级缓存失效的情况只有一种就是当两次查询执行了任意增删改在操作之后会是一级缓存和二级缓存同时失效。 5. 二级缓存的相关配置
刚才我提到了想要开启二级缓存需要在 mapper.xml 的映射文件中配置上 cache/ 这么一个标签除此之外我们还可以为此标签配置多个属性常用的属性有以下几种。
enviction属性缓存回收策略
LRU(Least Recently Used)最近最少使用的移除最长时间不被使用的对象
FIFO(First in First out)先进先出按对象进入缓存的顺序来移除它们
SOFT软引用移除基于垃圾回收器状态和软引用使用规则的对象
WEAK弱引用更积极地基于垃圾回收器状态和弱引用规则的对象
默认是LRU。 flushInterval属性刷新间隔单位毫秒
默认情况是不设置也就是没有刷新间隔缓存仅仅调用语句时刷新。 size属性引用数目正整数。
代表缓存最多可以存储多少个对象太大容易导致内存溢出。 readOnly属性只读ture或false
ture只读缓存会给所有调用者返回缓存对象的相同实例。因为这些对象不能被修改者提供了很重要的性能优势。
false读写缓存会返回缓存对象的拷贝(通过序列化)这会慢一些但是安全。
默认也就是false。 6. 缓存的查询顺序
先查询二级缓存因为二级缓存中可能会有其他程序已经查出来的数据可以拿来直接使用。
如果二级缓存没有命中再去查询一级缓存。
如果一级缓存也没有命中则查询数据库。
SqlSession 关闭之后一级缓存中的数据会写入到二级缓存中。