Mybatis快取原理以及資料庫快取策略

2021-08-28 20:23:07 字數 1100 閱讀 8014

executor與sqlsession的關係就像市長與書記,sqlsession只是個門面,真正幹事的是executor,sqlsession對資料庫的操作都是通過executor來完成的。與sqlsession一樣,executor也是動態建立的:

localcache本質是乙個hashmap,使用cachekey來訪問;cachekey由五個引數決定,statement id + offset + limit + params + sql。

一級快取命中與未命中的具體流程,如下圖:

在上文中提到的一級快取中,其最大的共享範圍就是乙個sqlsession內部,如果多個sqlsession之間需要共享快取,則需要使用到二級快取。開啟二級快取後,會使用cachingexecutor裝飾executor,進入一級快取的查詢流程前,先在cachingexecutor進行二級快取的查詢,具體的工作流程如下所示。

二級快取是在sqlsession呼叫commit後重新整理快取;

insert + delete + update 後更新快取...(具體如何更新........)// todo 

mybatis的二級快取相對於一級快取來說,實現了sqlsession之間快取資料的共享,同時粒度更加的細,能夠到namespace級別,通過cache介面實現類不同的組合,對cache的可控性也更強。

mybatis在多表查詢時,極大可能會出現髒資料,有設計上的缺陷,安全使用二級快取的條件比較苛刻。

在分布式環境下,由於預設的mybatis cache實現都是基於本地的,分布式環境下必然會出現讀取到髒資料,需要使用集中式快取將mybatis的cache介面實現,有一定的開發成本,直接使用redis,memcached等分布式快取可能成本更低,安全性也更高。

對介紹了mybatis一二級快取的基本概念,並從應用及原始碼的角度對mybatis的快取機制進行了分析。最後對mybatis快取機制做了一定的總結,個人建議mybatis快取特性在生產環境中進行關閉,單純作為乙個orm框架使用可能更為合適。

...個人認為只是把一級快取二級快取更換一種形式 置於 redis,memcached的服務上而已..

mybatis兩級快取原理剖析

對於mybatis的快取認識一直有乙個誤區,所以今天寫一篇文章幫自己訂正一下。mybatis的快取分一級快取與二級快取。下面分別對這兩種快取進行詳細解說。首先我們需要大致的了解一下mybatis的呼叫鏈,然後才能更好的理解mybatis的快取。主要的api羅列如下 public inte ce sq...

Mybatis 快取原理及失效情況解析

1 什麼是快取 cache 2 為什麼要使用快取 減少和資料庫的互動次數,減少系統開銷,提高系統效率。3 什麼樣的資料需要使用快取 經常查詢且不易改變的資料 4 mybatis快取 5 一級快取 一級快取也叫本地快取 6 一級快取失效的四種情況 test publicvoidtestqueryuse...

hibernate快取,mybatis快取詳解

hibernate的快取有一級快取,二級快取,查詢快取。一級快取 很簡單,session級別的快取,通過get,update可以將物件放到一級快取中。二級快取 sessionfactory級別的快取,通過get,list可以將物件放到二級快取中,這裡我必須細講一下,list雖然能夠把物件放入二級快取...