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

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

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

http://img1.sycdn.imooc.com//climg/5ef7e466095f046e06920316.jpg

http://img1.sycdn.imooc.com//climg/5ef7e46b09099cc706920103.jpg

http://img1.sycdn.imooc.com//climg/5ef7e47109c7ba0006920338.jpg

http://img1.sycdn.imooc.com//climg/5ef7e47609aae38606920081.jpg

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

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

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕阿满 2020-06-28 14:41:29

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

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

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

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

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

祝:学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师