MyBatis04 缓存

缓存

缓存存放内存中的临时数据,用户去查询数据就不用每次从磁盘上读取,而是从缓存读取,从而提高查询效率,解决高并发系统的性能问题。缓存内部的清理策略:LRU(默认),FIFO(先进先清),SOFT,WEAK

一级缓存(也叫本地缓存,默认开启)

只在与数据库同一次会话期间查到的数据会放到一级缓存

MyBatis04 缓存_第1张图片

 

MyBatis04 缓存_第2张图片

 

缓存失效情况:

1.查询不同sql语句时

2.增删改操作,肯改变原来数据必定刷新缓存

3.手动清理缓存

二级缓存(也叫全局缓存,需要手动开启)

在核心配置文件中显示开启全局缓存

MyBatis04 缓存_第3张图片

 

在要使用二级缓存的Mapper中开启

MyBatis04 缓存_第4张图片

 

测试

    @Test
    public void test(){//测试二级缓存
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        User user=mapper.getUserById(1);
        System.out.println(user);
        sqlSession.close();

        SqlSession sqlSession2=MybatisUtils.getSqlSession();
        UserMapper mapper2=sqlSession2.getMapper(UserMapper.class);
        User user2=mapper2.getUserById(1);
        System.out.println(user2==user);
        sqlSession2.close();
    }

  运行结果

MyBatis04 缓存_第5张图片

 

缓存原理

用户首次查询某条信息会访问到数据库并同时将查询到的数据放到本地缓存,期间如果多次查询,会先走一级缓存查看有没有要的数据,有则返回给用户没有则查询数据库,在没有开启二级缓存的情况下,当用户关闭了查询数据的会话窗口,缓存清除;当开启了二级缓存时,在用户关闭会话的瞬间一级缓存的数据会被放到二级缓存,下次用户访问直接先走二级缓存。

你可能感兴趣的:(MyBatis,缓存)