Mybatis一级缓存和二级缓存简述

### Mybatis一级缓存和二级缓存

缓存清除策略(二级)
  1. LRU(Least Recently Used):最近最少使用。移除最长时间不被使用的对象(MyBatis默认为此策略)
  2. FIFO(First In First Out): 先进先出。按照对象进入缓存的顺序来清除
  3. SOFT: 软引用。基于垃圾回收器状态和软引用规则来清除
  4. WEAK: 弱引用。更积极地基于垃圾回收器状态和弱引用规则来清除。

一级缓存(相当于一个Map )

  1. 作用域:只在建立连接的某一个SqlSession。该链接开启和关闭的区间内(默认开启,且无法关闭.)
  2. 缓存失效情况:
    • 同一SqlSession下查询不同的内容。
    • 在该SqlSession作用域下执行力增删改操作。(原因:缓存机制认为执行增删改之后,可能会改变原来数据。所以一定要刷新缓存。);
    • 查询不同的Mapper.xml;
    • 手动清理缓存。(SqlSession.clearCache);

二级缓存

  1. 作用域:二级缓存也叫全局缓存。基于namespace级别的缓存。一个名称空间对应一个二级缓存。

  2. 工作机制:

    • 一个会话查询一条数据返回后。该数据会被放在当前会话的一级缓存中。
    • 如果当前会话关闭了,该会话对应的一级缓存就没了。但我们需要一级缓存关闭后。一级缓存的内容被保存到二级缓存中;
    • 新的会话查询信息就可以从二级中获取。
    • 不同的Mapper查询出的数据会存放到自己对应的(map)缓存中
  3. 使用步骤:

    • 开启全局缓存。在mybatis-config.xml中

      <!--显式的开启全局缓存-->
      <settings>
            <setting name ="cacheEnabled" value = "true"></setting>
      </settings>
      
  • 在对应的Mapper.xml中加入即可开启对应xml二级缓存

  • 小结:

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

  • (2)所有数据都会先放在一级缓存中

  • (3)只有会话提交或者关闭的时候才会提交到二级缓存中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值