Redis實現Mybatis的二級快取

2021-07-29 12:25:06 字數 2127 閱讀 9493

通大多數orm層框架一樣,mybatis自然也提供了對一級快取和二級快取的支援。一下是一級快取和二級快取的作用於和定義。

1、一級快取是sqlsession級別的快取。在運算元據庫時需要構造 sqlsession物件,在物件中有乙個(記憶體區域)資料結構(hashmap)用於儲存快取資料。不同的sqlsession之間的快取資料區域(hashmap)是互相不影響的。

多個sqlsession可以共用二級快取,二級快取是跨sqlsession的。 

2、一級快取的作用域是同乙個sqlsession,在同乙個sqlsession中兩次執行相同的sql語句,第一次執行完畢會將資料庫中查詢的資料寫 到快取(記憶體),第二次會從快取中獲取資料將不再從資料庫查詢,從而提高查詢效率。當乙個sqlsession結束後該sqlsession中的一級快取 也就不存在了。mybatis預設開啟一級快取。

一般的我們將mybatis和spring整合時,mybatis-spring包會自動分裝sqlsession,而spring通過動態** sqlsessionproxy使用乙個模板方法封裝了select()等操作,每一次select()查詢都會自動先執行opensession(), 執行完close()以後呼叫close()方法,相當於生成了乙個新的session例項,所以我們無需手動的去關閉這個session(),當然也無 法使用mybatis的一級快取,也就是說mybatis的一級快取在spring中是沒有作用的。

因此我們一般在專案中實現mybatis的二級快取,雖然mybatis自帶二級快取功能,但是如果實在集群環境下,使用自帶的二級快取只是針對單個的節 點,所以我們採用分布式的二級快取功能。一般的快取nosql資料庫如redis,mancache等,或者ehcache都可以實現,從而更好地服務 tomcat集群中orm的查詢。

深入了解mybatis一級快取

深入了解mybatis二級快取

下面主要通過redis實現mybatis的二級快取功能。

預設二級快取是開啟的。

mybatis提供了第三方cache實現的介面,我們自定義mybatisrediscache實現cache介面,**如下:

/** 

*  * mybatis二級快取實現類 

*  * @author andy 

* @version 2.2 

*/  

public class mybatisrediscache implements cache   

log.info("redis cache id " + id);  

this.id = id;  

}  @override  

public string getid()   

@override  

public void putobject(object key, object value)   

}  @override  

public object getobject(object key)   

} catch (exception e)   

return null;  

}  @override  

public object removeobject(object key)   

} catch (exception e)   

return null;  

}  @override  

public void clear()   

@override  

public int getsize()   

});  

return size.intvalue();  

}  @override  

public readwritelock getreadwritelock()   

}  

type="org.andy.shop.cache.mybatisrediscache"  

eviction="lru"  

flushinterval="6000000"  

size="1024"  

readonly="false"  

/>  

redis會自動的將sql+條件+hash等當做key值,而將查詢結果作為value,只有請求中的所有引數都符合,那麼就會使用redis中的二級快取。其查詢結果如下:

Redis實現Mybatis的二級快取

通大多數orm層框架一樣,mybatis自然也提供了對一級快取和二級快取的支援。一下是一級快取和二級快取的作用於和定義。1 一級快取是sqlsession級別的快取。在運算元據庫時需要構造 sqlsession物件,在物件中有乙個 記憶體區域 資料結構 hashmap 用於儲存快取資料。不同的sql...

MyBatis的實現過程

根據xml配置檔案 全域性配置檔案 建立乙個sqlsessionfactory物件。包含資料來源和一些環境執行資訊 sql對映檔案 檔案中配置每乙個sql,以及sql的封裝規則等 將sql對映檔案註冊在全域性配置檔案中 實現 根據全域性配置檔案得到sqlsessionfactory 使用sqlses...

mybatis實現分頁

邏輯分頁 1.1.業務控制層 public void selectdeptwithpage1 1.2 資料訪問層 select from t department and deptname like if where select 2.物理分頁 這種分頁是我們mysql資料庫支援的,其實也就是拼sq...