二级缓存问题
老师好:请问开启了二级缓存后 commit提交时对该namespace缓存强制清空还会起作用吗?
为什么我这边演示commit打开/关闭后,缓存使用频率是一样的?
commit提交打开
[main] 15:37:42.399 DEBUG goods - Cache Hit Ratio [goods]: 0.3333333333333333
[main] 15:37:42.399 DEBUG goods - Cache Hit Ratio [goods]: 0.5
[main] 15:37:42.400 DEBUG goods - Cache Hit Ratio [goods]: 0.6
打印哈希值6750210:::6750210:::6750210
commit提交关闭
[main] 15:40:35.271 DEBUG goods - Cache Hit Ratio [goods]: 0.3333333333333333
[main] 15:40:35.271 DEBUG goods - Cache Hit Ratio [goods]: 0.5
[main] 15:40:35.271 DEBUG goods - Cache Hit Ratio [goods]: 0.6
打印哈希值6750210:::6750210:::6750210
@Test public void testLV1Cache(){ SqlSession sqlSession=null; try { sqlSession=MybatilsUtils.openSession(); Goods goods=sqlSession.selectOne("goods.selectById",900); Goods goods1=sqlSession.selectOne("goods.selectById",900); //Goods goods3=sqlSession.selectOne("goods.selectById",900); //Goods goods4=sqlSession.selectOne("goods.selectById",900); System.out.println("打印哈希值"+goods.hashCode()+":::"+goods1.hashCode()); //":::"+goods3.hashCode()+":::"+goods4.hashCode()); } catch (Exception e) { e.printStackTrace(); }finally { MybatilsUtils.closeSession(sqlSession); } try { sqlSession=MybatilsUtils.openSession(); Goods goods3=sqlSession.selectOne("goods.selectById",900); // sqlSession.commit();//commit提交时对该namespace缓存强制清空 Goods goods4=sqlSession.selectOne("goods.selectById",900); //sqlSession.commit(); Goods goods5=sqlSession.selectOne("goods.selectById",900); System.out.println("打印哈希值"+goods3.hashCode()+":::"+goods4.hashCode()+":::"+goods5.hashCode()); } catch (Exception e) { e.printStackTrace(); }finally { MybatilsUtils.closeSession(sqlSession); } }
正在回答
同学你好
开启二级缓存,执行 DML 操作(insert、update、delete),并commit提交了,会对该namespace缓存强制清空。
执行select时不会清空二级缓存。
注:为了同学的问题可以清晰定位,可以在提问时上传代码运行截图,并将疑问部分圈出哦。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星