MyBatis的一級緩存和二級緩存以及優(yōu)點說明
一級緩存
MyBatis的本地緩存是指在同一個SqlSession中執(zhí)行相同的查詢語句時,會將查詢結(jié)果緩存在內(nèi)存中,下次執(zhí)行相同的查詢語句時,直接從緩存中獲取結(jié)果,而不需要再次訪問數(shù)據(jù)庫。
本地緩存的默認(rèn)開啟是在SqlSessionFactory中設(shè)置的,可以通過在mapper.xml文件中的select標(biāo)簽中添加useCache="false"來關(guān)閉本地緩存。
二級緩存
MyBatis的二級緩存是指在多個SqlSession中執(zhí)行相同的查詢語句時,會將查詢結(jié)果緩存在內(nèi)存中,下次執(zhí)行相同的查詢語句時,直接從緩存中獲取結(jié)果,而不需要再次訪問數(shù)據(jù)庫。
與本地緩存不同的是,二級緩存是跨SqlSession的,也就是說,一個SqlSession中對某個查詢語句的緩存結(jié)果,可以被其他SqlSession共享。
二級緩存的默認(rèn)開啟也是在SqlSessionFactory中設(shè)置的,可以通過在mapper.xml文件中的cache標(biāo)簽中添加type="org.apache.ibatis.cache.impl.PerpetualCache"來開啟二級緩存。
同時,需要注意的是,二級緩存的實現(xiàn)需要滿足以下兩個條件:
- 必須在mapper.xml文件中的select標(biāo)簽中添加cache標(biāo)簽,并指定cache的id。
- 查詢語句的返回值類型必須是可序列化的,因為緩存是存儲在內(nèi)存中的,需要將緩存結(jié)果序列化到磁盤上。如果返回值類型不可序列化,會在緩存時拋出異常。
二級緩存的優(yōu)點
1.減少數(shù)據(jù)庫的訪問次數(shù)
使用二級緩存可以減少數(shù)據(jù)庫的訪問次數(shù),從而提高應(yīng)用程序的響應(yīng)速度。
當(dāng)應(yīng)用程序需要重復(fù)查詢相同的數(shù)據(jù)時,可以直接從緩存中獲取數(shù)據(jù),而不用再次訪問數(shù)據(jù)庫。
2.提高應(yīng)用程序的性能
使用二級緩存可以將查詢結(jié)果緩存到應(yīng)用程序的內(nèi)存中,訪問內(nèi)存的速度比訪問數(shù)據(jù)庫的速度要快得多。
這樣可以大大提高應(yīng)用程序的性能,尤其是在高并發(fā)的情況下。
3.降低數(shù)據(jù)庫的負(fù)載
使用二級緩存可以降低數(shù)據(jù)庫的負(fù)載,減少數(shù)據(jù)庫的壓力。
當(dāng)應(yīng)用程序需要查詢相同的數(shù)據(jù)時,可以直接從緩存中獲取數(shù)據(jù),而不用再次訪問數(shù)據(jù)庫,這樣可以減少數(shù)據(jù)庫的負(fù)載。
4.提高應(yīng)用程序的可擴展性
使用二級緩存可以提高應(yīng)用程序的可擴展性。當(dāng)應(yīng)用程序需要擴展時,可以在多臺服務(wù)器之間共享緩存,從而避免了數(shù)據(jù)不一致的問題,提高了應(yīng)用程序的可擴展性。
總之,使用二級緩存可以顯著提高應(yīng)用程序的性能和可擴展性,減少數(shù)據(jù)庫的訪問次數(shù)和負(fù)載,是一個非常有用的功能。
但需要注意的是,二級緩存可能會導(dǎo)致數(shù)據(jù)不一致的問題,需要根據(jù)具體情況進(jìn)行配置和使用。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
很多人竟然不知道Java線程池的創(chuàng)建方式有7種
本文主要介紹了很多人竟然不知道Java線程池的創(chuàng)建方式有7種,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07java用字節(jié)數(shù)組解決FileInputStream讀取漢字出現(xiàn)亂碼問題
這篇文章主要介紹了java用字節(jié)數(shù)組解決FileInputStream讀取漢字出現(xiàn)亂碼問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05java 抓取網(wǎng)頁內(nèi)容實現(xiàn)代碼
這篇文章主要介紹了java 抓取網(wǎng)頁內(nèi)容實現(xiàn)代碼,需要的朋友可以參考下2014-02-02