Mybatis知识小汇(13)——缓存(二级缓存)

文章目录

二级缓存
  • 二级缓存也叫全局缓存,一级缓存作用域太低,所以诞生了二级缓存
  • 基于namespace级别的缓存,一个名字空间对应一个二级缓存
  • 工作机制
    • 一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中
    • 如果当前会话关闭一级缓存也就会消失,但是我们想要的是会话关闭时,一级缓存中的数据保存到二级缓存中
    • 新的会话查询信息,就可以从二级缓存中获取
    • 不同的mapper查询数据会放在自己对应的缓存(map)中

步骤:

  1. 开启全局缓存

    <settings>
        <!--        显示开启全局缓存,默认也是true-->
        <setting name="cacheEnabled" value="true"/>
    </settings>
    
  2. 在要使用二级缓存的Mapper中定义
    需要实现序列化

    <cache/>
    

    也可以

    <!--    在当前Mapper.xml中使用二级缓存-->
    <cache
           eviction="FIFO"
           flushInterval="60000"
           size="512"
           readOnly="true"/>
    

Mybatis知识小汇(13)——缓存(二级缓存)

  1. 测试

    1. 未开启二级缓存

      public class UserMapperTest {
          @Test
          public void selectById(){
              SqlSession sqlSession = MybatisUtils.getSqlSession();
              SqlSession sqlSession1 = MybatisUtils.getSqlSession();
      
              UserMapper mapper = sqlSession.getMapper(UserMapper.class);
              UserMapper mapper1 = sqlSession1.getMapper(UserMapper.class);
      
              User user = mapper.selectById(1);
              System.out.println(user);
              sqlSession.close();
              System.out.println("==================================================");
              User user1 = mapper1.selectById(1);
              System.out.println(user1);
      
              System.out.println(user == user1);
              sqlSession1.close();
          }
      }
      

Mybatis知识小汇(13)——缓存(二级缓存)

  1. 开启二级缓存

    Mybatis知识小汇(13)——缓存(二级缓存)

小结:

  1. 只要开启了二级缓存,在同一个Mapper下都有效
  2. 所有数据都会先放在一级缓存中
  3. 当提交数据或者关闭连接时,才会放到二级缓存中
    上一节–>一级缓存
    如有不对的地方欢迎指出,共同进步!
上一篇:mybatisPuls初步了解


下一篇:Mybatis学习笔记整理