美文网首页
Java高级框架mybatis框架缓存

Java高级框架mybatis框架缓存

作者: Java联盟 | 来源:发表于2018-01-08 21:13 被阅读0次

    各位小伙伴

    我们今天来分享的是

    mybatis 的缓存

    缓存小伙伴们应该都有了解一点儿吧!就是我们看电影的时候,有时候就会弹出一句,"网速不好,缓存一下再看".或者就是"进度君在玩命的加载中...".大致就是这些了,那么今天我们就来一起了解一下mybatis框架的缓存.

    Mybatis 缓存

    缓存的概念

    当用户频繁查询某些固定的数据时,第一次将这些数据从数据库中查询出来,保存在缓存(内存,高速磁盘)中.当下次用户再次查询这些数据时,不用再通过数据库查询,而是去缓存里面查询.

    减少网络连接和数据库查询带来的损耗,从而提高我们的查询效率,减少高并发访问带来的系统性能问题.

    MyBatis 的缓存分为一级缓存和二级缓存

    如图所示:

    Mybatis 的一级缓存是只在同一个 sqlSession 里面应用 Mybatis 的二级缓存可以跨越 sqlSession ,以 mapper 为单位创建,是系统级缓存.

    一级缓存

    如图所示:

    当第一次发出 sql 请求的时候, Mybatis 会从数据库查询,并将结果存入一级缓存中.当在同一个 sqlSession 里面发出同样的 sql 查询请求, Mybatis 会直接从缓存中查找.如果没有,则从数据库查找.

    注意:

    MyBatis 默认支持一级缓存,不需要另外配置,但是在跟 spring 整合的时候,进行 mapper 代理开发的方式时,mybatis 的一级缓存是不存在的 ,因为代理模板每次调用完之后都会关闭sqlSession. 

    如果 sqlSession 里面出现 commit 操作, sqlSession 中的缓存会被全部清空,避免出现脏读.

    二级缓存

    a:Mybatis 的二级缓存是 mapper 级别的,就是说二级缓存是以 Mapper 配置文件的namespace 为单位创建的.

    b:Mybatis 的二级缓存需要在 settting 里面加入配置(默认是开启的)

    c:需要在 mapper 映射文件加入标签才可以触发此映射文件开启二级缓存.

    d:在映射文件用到的查询对象必须序列化 User.java

    e:如果需要禁用某个 statment 的缓存 ,可以在这个 statement 里面单独设置 ,比如我们的用户名和密码不需要缓存.

    好的,我们的二级缓存设置完成了,现在来测试一下.我们把 sqlsession 关闭了.这样就是不用一级缓存了.

    我们现在看见的就是二级缓存的效果了

    二级缓存的相关配置

    eviction: 缓存的回收策略 默认为LRU

        LRU:移除近期最少使用的对象

        FIFO: FIRST INPUT FIRST OUT 按照进入的时间移除对象

        SOFT: 软引用 ,移除基于垃圾回收状态和软引用规则的对象

        WEAK :弱引用,更积极的移除基于垃圾回收状态和弱引用规则的对象

    flushInterval:刷新缓存,默认不自动刷新,可以为任意的正整数,单位是毫秒时间 ,在增删改操作的时候会刷新.

    size:缓存被应用的数目,默认1024次查询的结果

    readOnly :缓存的只读属性 ,默认是false,代表缓存不能修改

    那么各位小伙伴

    今天的分享就到这里了

    拜拜

    相关文章

      网友评论

          本文标题:Java高级框架mybatis框架缓存

          本文链接:https://www.haomeiwen.com/subject/xcrinxtx.html