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