Java高级框架mybatis框架缓存

2018-01-08  本文已影响0人  Java联盟

各位小伙伴

我们今天来分享的是

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,代表缓存不能修改

那么各位小伙伴

今天的分享就到这里了

拜拜

上一篇下一篇

猜你喜欢

热点阅读