开关二级缓存commit对查询结果缓存清空问题

来源:2-3 MyBatis二级缓存-2

qq_酒半熏_0

2020-06-28 08:39:37

老师好,在设置事务手动提交下,不开启二级缓存,使用commit方法两次查询数据库同一条数据返回的对象不一样,也就是说commit方法没有写操作清空了缓存;开启二级缓存,使用commit方法两次查询数据库同一条数据返回的对象一样,也就是说commit方法没有写操作没有清空缓存。

http://img.mukewang.com/climg/5ef7e466095f046e06920316.jpg

http://img.mukewang.com/climg/5ef7e46b09099cc706920103.jpg

http://img.mukewang.com/climg/5ef7e47109c7ba0006920338.jpg

http://img.mukewang.com/climg/5ef7e47609aae38606920081.jpg

然后二级缓存运行规则有:二级开启后默认所有查询操作均使用缓存。问题1:难道二级没开启所有查询操作就没有使用缓存(一级缓存),这个地方为什么要单独列出来?

写操作commit提交时对该namespace缓存强制清空。--》只是查询commit提交时不会对该namespace缓存强制清空。问题2:查询commit提交对于二级缓存开启和不开启出现不清空和清空该namespace缓存两种清空,怎么理解这种区别?为什么不统一查询commit提交对于二级缓存开启和不开启都不清空该namespace缓存呢,这样不是更好?

写回答

1回答

好帮手慕阿满

2020-06-28

同学你好,关于同学的问题:

1、一级缓存的范围是SqlSession,使用一级缓存时,多次查询的sqlSession对象是不同的,所以相当于查询时没有缓存。

2、查询时并没有对数据进行修改,并不会将数据清空,写入内存。

在一级缓存时,作用范围是sqlSession,每次sqlSession对象不同,相当于每次都清空缓存。

二级缓存时,作用范围是namespace,查询并不会修改数据,所以不会清空namespace缓存。

祝:学习愉快~

0

0 学习 · 8016 问题

查看课程