Redis實現Mybatis的二級快取

2021-09-30 15:50:25 字數 1969 閱讀 1683

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

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

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的查詢。

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

<?xml version="1.0" encoding="utf-8"?>

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

/** 

* * mybatis二級快取實現類

* * @author yumao

* @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()

}

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...