Mybatis_一級緩存使用和有效期和原理


緩存是計算機中的一塊存儲區域,把數據放入到存儲區域中,讀取速度會很快

  • 一級緩存:SqlSession級別的緩存
    這個是默認開啟的

因為接着之前的代碼,所以我表映射XML文件就省略了


/Mybatis02/src/test/Start2.java


public class Start2 {

	public static void main(String[] args) throws IOException {
		
		String resource = "mybatis-conf.xml";
		InputStream  inputStream = Resources.getResourceAsStream(resource);
		//創建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		//true表示自動提交。否則需要使用commit方法才會提交。默認是false
		SqlSession session = sqlSessionFactory.openSession();
		
		//拿到接口的代理對象
		GoodsDao2 dao=session.getMapper(GoodsDao2.class);

		//拿到了dao這個對象接下來就可以創建sql語句了;(直接調用接口方法)
		long s1 = System.currentTimeMillis();
		List list = dao.selAll();
		System.out.println(list);
		long e1 =System.currentTimeMillis();
		System.out.println("第一次查詢時間:"+(e1-s1));
		//再做一次重復查詢,測試下執行時間
		long s2 = System.currentTimeMillis();
		List list2 = dao.selAll();
		System.out.println(list2);
		long e2 =System.currentTimeMillis();
		System.out.println("第一次查詢時間:"+(e2-s2));
		
	
		//如果上面不設置自動提交表單,那么就需要commit方法
		session.commit();
	}

}

總結:可以看到,第二次查詢的運行時間非常的短。且沒有再次執行SQL語句,它是直接從緩存里拿出來的

  • 一級緩存是默認開啟的,當你創建SqlSession對象時候 就開啟了

它是怎么做到的呢,流程圖如下:

原理流程:
當Client客戶發送一條SQL,經過我們的SqlSession對象,那么SqlSession對象把這個處理權交給我們的Executor對象。Executor對象會先在本地緩存中查找是否有你要的這條數據,如果有的話我們直接從緩存中把數據返回給你,如果沒有的話,我們再去數據庫IO操作 讀取數據,讀取完成之后,會把數據返回給Executor執行器對象,那么接着我們這個Executor執行器對象會把拿到的數據放在本地緩存中,方便你下次查詢。最終再把結果返回給Client客戶。


一級緩存中數據的有效期(即緩存情況下會清除掉)

  • 1.1一級緩存中數據的有效期
    1.1.1當不是同一個SqlSession對象的時候(s1,s2)
    s1中緩存的數據 s2不能使用的
    1.1.2當SqlSession對象調用.clearCache()方法的時候,會自動清除緩存中的數據。SqlSession對象還是可以正常使用的
    1.1.3當SqlSession對象關閉的時候,SqlSession對象就不能再使用了
    1.1.4當在兩次相同的查詢中間 穿插了 新增 修改好或者刪除操作,也會清除緩存中的數據

mybatis_一級緩存實現原理及性能分析

  • 1.2一級緩存實現原理及性能分析
    1.2.1一級緩存通過簡單Map集合來實現,並沒有對Map集合的大小,容量進行限制
    1.2.2一級緩存它是一個粗粒度的緩存,沒有辦法去精確控制緩存中的數據是否過期以及去更新緩存數據
    1.2.3多個SqlSession對象緩存中的數據無法共享(因為這個原因所以有了二級緩存的概念)

什么是二級緩存 ?請聽下回分解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM