首頁 Java java教程 詳解MyBatis關於二級快取問題的程式碼實例

詳解MyBatis關於二級快取問題的程式碼實例

Mar 24, 2017 am 10:34 AM

這篇文章主要介紹了MyBatis關於二級緩存問題,二級緩存是Mapper層級的緩存,多個sqlSession操作同一個Mapper,其二級緩存是可以共享的。

MyBatis提供一級緩存和二級緩存,其中一級緩存是sqlSession級別的緩存,不同的sqlSession之間的緩存互不影響。二級緩存是Mapper層級的緩存,多個sqlSession操作同一個Mapper,其二級緩存是可以共享的。

MyBatis有多種二級快取方案可供選擇。其中對Memcached的支援較為成熟,現以Memcached為例介紹與spring專案的整合。

使用設定

配置pom.xml,新增依賴。

<dependencies>
 ...
 <dependency>
  <groupId>org.mybatis.caches</groupId>
  <artifactId>mybatis-memcached</artifactId>
  <version>1.0.0</version>
 </dependency>
 ...
</dependencies>
登入後複製

全域開關

<settings>
  <setting name="cacheEnabled" value="true"/>
</settings>
登入後複製

配置需要快取的mapper.xml

二級快取是Mapper層級的,可以針對具體的mapper.xml開啟二級快取。

<mapper namespace="org.acme.FooMapper">
 <cache type="org.mybatis.caches.memcached.MemcachedCache" />
</mapper>
登入後複製

開啟後,則mapper中所有的select語句預設都會被緩存,此命名空間下所有insert、update、delete語句將會導致空間下的快取被清空。

可以針對特定某條語句停用快取。

 <select id="retObj" resultMap="results" useCache="false" >
   select id, name, sex from employee  
 </select>
登入後複製

也可針對某條語句觸發刷新動作(預設對應所有插入、更新刪除語句)。

 <select id="retObj" resultMap="results" flushCache="true" >
   select id, name, sex from employee  
 </select>
登入後複製

配置參數在memcached.properties中設置,如果缺失則使用預設設定。

以下是設定參數:

如果需要記錄cache操作日誌,可由下列設定實作

<mapper namespace="org.acme.FooMapper">
 <cache type="org.mybatis.caches.memcached.LoggingMemcachedCache" />
 ...
</mapper>
登入後複製

注意事項

快取在Memcached中的類別需要實作Serializable接口,否則會報錯java.io.NotSerializableException

二級快取應用程式場景

  1. 對查詢頻率高,變化頻率低的資料建議使用二級快取。

  2. 對於存取多的查詢請求且使用者對查詢結果即時性要求不高,此時可採用mybatis二級快取技術降低資料庫存取量,提高存取速度,業務場景例如:耗時較高的統計分析sql、電話帳單查詢sql等。

實作方法如下:

透過設定刷新間隔時間,由mybatis每隔一段時間自動清空緩存,根據資料變化頻率設定快取刷新間隔flushInterval,例如設定為30分鐘、60分鐘、24小時等,依需求而定。

mybatis限制

mybatis二級快取對細粒度的資料層級的快取實作不好。

例如如下需求:對商品資訊進行緩存,由於商品資訊查詢訪問量大,但是要求用戶每次都能查詢最新的商品信息,此時如果使用mybatis的二級緩存就無法實現當一個商品變化時只刷新該商品的緩存信息而不刷新其它商品的信息,因為mybaits的二級緩存區域以mapper為單位劃分,當一個商品信息變化會將所有商品資訊的快取資料全部清空。解決此類問題需要在業務層根據需求對資料有針對性快取。

以上是詳解MyBatis關於二級快取問題的程式碼實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

iBatis和MyBatis:哪個比較適合你? iBatis和MyBatis:哪個比較適合你? Feb 19, 2024 pm 04:38 PM

iBatis和MyBatis:哪個比較適合你?

實作MyBatis中批次刪除操作的多種方式 實作MyBatis中批次刪除操作的多種方式 Feb 19, 2024 pm 07:31 PM

實作MyBatis中批次刪除操作的多種方式

詳解MyBatis動態SQL標籤中的Set標籤功能 詳解MyBatis動態SQL標籤中的Set標籤功能 Feb 26, 2024 pm 07:48 PM

詳解MyBatis動態SQL標籤中的Set標籤功能

比較分析JPA和MyBatis的功能和性能 比較分析JPA和MyBatis的功能和性能 Feb 19, 2024 pm 05:43 PM

比較分析JPA和MyBatis的功能和性能

MyBatis批次刪除語句的使用方法詳解 MyBatis批次刪除語句的使用方法詳解 Feb 20, 2024 am 08:31 AM

MyBatis批次刪除語句的使用方法詳解

MyBatis 一級快取詳解:如何提升資料存取效率? MyBatis 一級快取詳解:如何提升資料存取效率? Feb 23, 2024 pm 08:13 PM

MyBatis 一級快取詳解:如何提升資料存取效率?

MyBatis Generator配置參數解讀及最佳實踐 MyBatis Generator配置參數解讀及最佳實踐 Feb 23, 2024 am 09:51 AM

MyBatis Generator配置參數解讀及最佳實踐

解析MyBatis的快取機制:比較一級快取和二級快取的特性和用法 解析MyBatis的快取機制:比較一級快取和二級快取的特性和用法 Feb 25, 2024 pm 12:30 PM

解析MyBatis的快取機制:比較一級快取和二級快取的特性和用法

See all articles