开关二级缓存commit对查询结果缓存清空问题
来源:2-3 MyBatis二级缓存-2
qq_酒半熏_0
2020-06-28 08:39:37
老师好,在设置事务手动提交下,不开启二级缓存,使用commit方法两次查询数据库同一条数据返回的对象不一样,也就是说commit方法没有写操作清空了缓存;开启二级缓存,使用commit方法两次查询数据库同一条数据返回的对象一样,也就是说commit方法没有写操作没有清空缓存。
然后二级缓存运行规则有:二级开启后默认所有查询操作均使用缓存。问题1:难道二级没开启所有查询操作就没有使用缓存(一级缓存),这个地方为什么要单独列出来?
写操作commit提交时对该namespace缓存强制清空。--》只是查询commit提交时不会对该namespace缓存强制清空。问题2:查询commit提交对于二级缓存开启和不开启出现不清空和清空该namespace缓存两种清空,怎么理解这种区别?为什么不统一查询commit提交对于二级缓存开启和不开启都不清空该namespace缓存呢,这样不是更好?
1回答
好帮手慕阿满
2020-06-28
同学你好,关于同学的问题:
1、一级缓存的范围是SqlSession,使用一级缓存时,多次查询的sqlSession对象是不同的,所以相当于查询时没有缓存。
2、查询时并没有对数据进行修改,并不会将数据清空,写入内存。
在一级缓存时,作用范围是sqlSession,每次sqlSession对象不同,相当于每次都清空缓存。
二级缓存时,作用范围是namespace,查询并不会修改数据,所以不会清空namespace缓存。
祝:学习愉快~
相似问题