mybatis為什么不用二級(jí)緩存 MyBatis中如何禁用緩存?
MyBatis中如何禁用緩存?1級(jí)緩存可以簡(jiǎn)單地理解為會(huì)話級(jí)或線程級(jí)緩存。當(dāng)查詢發(fā)生時(shí),mybatis將找出當(dāng)前會(huì)話中是否存在相同的查詢。如果有,它將直接訪問緩存,而不是訪問數(shù)據(jù)庫。執(zhí)行線程后,緩存將
MyBatis中如何禁用緩存?
1級(jí)緩存可以簡(jiǎn)單地理解為會(huì)話級(jí)或線程級(jí)緩存。當(dāng)查詢發(fā)生時(shí),mybatis將找出當(dāng)前會(huì)話中是否存在相同的查詢。如果有,它將直接訪問緩存,而不是訪問數(shù)據(jù)庫。執(zhí)行線程后,緩存將被清除。第二級(jí)緩存是進(jìn)程級(jí)緩存。可以通過向映射器文件添加節(jié)點(diǎn)來啟用它。我猜mybatis緩存將SQL語句參數(shù)作為鍵,查詢結(jié)果作為映射中的值。Hit表示查詢的SQL語句和參數(shù)相同,可以在緩存鍵中找到。此時(shí),結(jié)果將直接返回。密巴蒂斯的秘密藏在記憶里。你可以看到別人寫的博客:mybatis緩存機(jī)制deep dissection/自定義二級(jí)緩存非常清晰。
CPU的一二三級(jí)緩存有什么用處?
讓我們先看看為什么CPU有L1、L2和L3緩存設(shè)計(jì)。如下圖所示,當(dāng)前處理器速度太快,從內(nèi)存讀取數(shù)據(jù)太慢(一是內(nèi)存本身速度不夠快,二是距離CPU太遠(yuǎn))。一般來說,它需要讓CPU等待幾十個(gè)甚至幾百個(gè)時(shí)鐘周期)。此時(shí),為了確保CPU的速度,需要更少的延遲和更快的內(nèi)存來幫助,這就是緩存。
現(xiàn)在讓我們看看多級(jí)緩存(L1、L2、L3)的好處,而不僅僅是單個(gè)緩存。
1. 緩存越靠近ALU和其他核心單元,訪問速度就越快。因此,核心附近會(huì)有一級(jí)緩存。雖然它很小,但它真的很快。緩存容量越大,緩存命中率越高,命中率越高,所以當(dāng)L1不能命中時(shí),它需要一個(gè)更大但不慢的緩存來提供數(shù)據(jù),即L2;
3。更大的緩存意味著更高的命中率,這也意味著更高的成本、更低的速度、更多的晶體管和更大的面積,因此它不能接近所有的核心單元,即L3;
這是基于性能、成本和設(shè)計(jì)的CPU平衡,一級(jí)緩存可以最大化單個(gè)內(nèi)核的位置和速度(甚至是單獨(dú)的指令和數(shù)據(jù))。二級(jí)緩存將更大,命中率更高,速度更慢。它通常位于每個(gè)核心,而L3緩存通常在系統(tǒng)的所有核心之間共享,以提供合理的速度和容量。例如,Intel Core i7-8700k的L1大小為64K,也分為32K數(shù)據(jù)和32K指令。L2大小為256K,L3大小為12MB。
現(xiàn)代CPU緩存體系結(jié)構(gòu)非常復(fù)雜,包括硬件預(yù)取和數(shù)據(jù)轉(zhuǎn)發(fā),以提供最佳緩存命中率。一些cpu甚至添加了L4緩存。
mybatis有必要用redis作緩存么?
通常,為了減少對(duì)數(shù)據(jù)庫的壓力,我們會(huì)引入緩存。在Dao查詢數(shù)據(jù)庫之前,先去緩存看看是否有要查找的數(shù)據(jù)。如果有,則使用緩存中的數(shù)據(jù),而不是查詢數(shù)據(jù)庫。如果沒有,就去數(shù)據(jù)庫找。所以你可以分擔(dān)數(shù)據(jù)庫的壓力。另外,為了使緩存中的數(shù)據(jù)與數(shù)據(jù)庫同步,我們應(yīng)該添加邏輯代碼來更新數(shù)據(jù)發(fā)生變化的緩存。這實(shí)際上增加了工作量,但也侵犯了原始代碼。這對(duì)沉迷于代碼清潔的程序員來說是一種傷害。Mybatis框架長期以來一直在考慮這些問題,因此Mybatis提出了用戶定義的二級(jí)緩存的概念,在不改變?cè)袠I(yè)務(wù)邏輯的情況下,可以方便地引入我們自己的緩存機(jī)制。