二级缓存

本地二级缓存:

一级缓存:单个Session共享内容
二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存。

本地二级缓存图解:

image.png

注意:
1)commit操作(执行插入、更新、删除)可清空二级缓存(同时清空所有的一级缓存)。也就是刷新缓存。
2)这个仅能在单台服务器上共享


拓展 :
分布式二级缓存。

修改DB必须手动同步缓存
image.png

开发注意:
1,核心配置开启二级缓存
在 settings 里面加入 <setting name="cacheEnabled" value="true"/>

2,Mapper.xml中开启二级缓存<cache/> 哪个实体需要二级缓存 就在哪个实体Mapper 里面加入<cache/> 标签

image.png

3,POJO序列化:BookInfo implements Serializable
需求:把一个对象的数据,存储到本地记事本?这种场景下的对象必须做序列化。
对象流java.io.ObjectOutputStream


image.png

二级缓存数据存储介质多,将缓存数据取出执行反序列化操作。

注意:在sqlSession执行close()后,才将数据写入二级缓存中。否则第二次还是从DB查询。

开发步骤:

第一步:核心配置文件开启二级缓存

image.png

第二步:Mapper映射文件开启二级缓存

image.png

第三步:需要对实体类做序列化

image.png

第四步:核心代码与测试

每次都是一个新的 SqlSession。

测试代码如下 : 解释已经注释了 观察 每一段的注释 ,
@Test
public void testTwoCache(){
SqlSession sqlSession2 = SqlSessionFactoryUtilSingleE.getSqlSession();
SqlSession sqlSession = SqlSessionFactoryUtilSingleE.getSqlSession();
SqlSession sqlSession1 = SqlSessionFactoryUtilSingleE.getSqlSession();
/**
* 使用第一个sqlSession 进行查询数据
* 需要注意的地方是 sqlSession.close(); 绝对不能少 。
*/
BookInfoMapper mapper = sqlSession.getMapper(BookInfoMapper.class);
BookInfo bookInfo = mapper.selectByPrimaryKey(1l);
sqlSession.close();
Log.debug(bookInfo);

    /**
     * 使用sqlSession1查询数据 发现这个时候并没有打印Sql 语句 这就说明新的 sqlSession1 是从二级缓存得到的数据
     */
    BookInfoMapper mapper1 = sqlSession1.getMapper(BookInfoMapper.class);
    BookInfo bookInfo1 = mapper1.selectByPrimaryKey(1l);
    Log.debug(bookInfo1);

    /**
     * 新的 sqlSession2 进行更新数据 并且 commit   观察输出 打印sql 并更新数据库
     */
    BookInfoMapper mapper2 = sqlSession2.getMapper(BookInfoMapper.class);
    bookInfo1.setBookName("balbala");
    mapper2.updateByPrimaryKeySelective(bookInfo1);
    sqlSession2.commit();


    /**
     * 使用之前使用的  sqlSession  进行数据查询 发现一个问题   查询打印出来了 SQL 语句 
     * 这就说明并没有从二级缓存查询数据 而是从新从数据库查询数据
     */
    BookInfo bookInfo2 = mapper1.selectByPrimaryKey(1l);
    Log.debug(bookInfo2);
}

控制台输出结果如下所示:


image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容