栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-06 Mybatis中的缓存

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-06 Mybatis中的缓存

8.1 一级缓存

MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。

默认情况下,只启用了本地的会话缓存,即一级缓存,它仅仅对一个会话即一个sqlsession中的数据进行缓存。

缓存失效的情况:

  • 查询不同的东西

  • 增删改操作,可能会改变原来数据,所以一定会刷新缓存

  • 查询不同的Mapper.xml

  • 手动刷新缓存

 sqlSession.clearCache();//手动清理缓存

一级缓存默认是开启的,只在一次sqlsession中有效,本质为一个map。

8.2 二级缓存

二级缓存也叫全局缓存,其作用域为一个namespace,一个命名空间对应一个二级缓存

工作机制

  • 一个会话查询一个数据,这个数据就会被放在一级缓存中

  • 如果当前会话关闭,则一级缓存就没了,我们要的是一级缓存失效后,会保存在二级缓存中

  • 新的会话查询数据,就会从二级缓存中读取数据

  • 不同的mapper查出的数据会放在自己的缓存(map)中

显式的开启全局缓存,虽然他默认是开启的,但还是声明一下比较明显

   
     

启用全局的二级缓存,只需要在你的 SQL 映射文件中添加一行:

但是只写上面的会报错,因为二级缓存必须设定为只读,如果不设定则必须让实体类进行实例化。

这个更高级的配置创建了一个 FIFO 缓存,每隔 60 秒刷新,最多可以存储结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此对它们进行修改可能会在不同线程中的调用者产生冲突。

可用的清除策略有:

  • LRU – 最近最少使用:移除最长时间不被使用的对象。

  • FIFO – 先进先出:按对象进入缓存的顺序来移除它们。

  • SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。

  • WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。

默认的清除策略是 LRU。

flushInterval(刷新间隔)

size(引用数目)

readOnly(只读)

小结:

  • 只要开启了二级缓存,在同一个mapper下就有效

  • 所有的数据都会先放在一级缓存中

  • 只有当会话提交或者关闭时才会提交到二级缓存中

8.3 缓存的原理

 

8.4 自定义缓存的使用Ehcache 1.导坐标

    org.mybatis.caches
    mybatis-ehcache
    1.2.1
2.在mapper中开启二级缓存
       
3.导入ehcache.xml配置文件


​
    
​
    
​
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298569.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号