日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[原创]mybatis中整合ehcache缓存框架的使用

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [原创]mybatis中整合ehcache缓存框架的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mybatis整合ehcache緩存框架的使用

  mybaits的二級緩存是mapper范圍級別,除了在SqlMapConfig.xml設置二級緩存的總開關,還要在具體的mapper.xml中開啟二級緩存。

1.開啟mybatis的二級緩存

  在核心配置文件SqlMapConfig.xml中加入

1 <settings> 2 <!-- 開啟二級緩存 --> 3 <setting name="cacheEnabled" value="true"/> 4 </settings>

?


2.導入ehcache相關jar包

ehcache-core-2.6.5.jar

mybatis-ehcache-1.0.2.jar


3.在classpath下加入ehcache.xml文件

1 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> 3 <diskStore path="F:\develop\ehcache" /> 4 <defaultCache 5 maxElementsInMemory="1000" 6 maxElementsOnDisk="10000000" 7 eternal="false" 8 overflowToDisk="false" 9 timeToIdleSeconds="120" 10 timeToLiveSeconds="120" 11 diskExpiryThreadIntervalSeconds="120" 12 memoryStoreEvictionPolicy="LRU"> 13 </defaultCache> 14 </ehcache>

?

屬性說明:
? diskStore:指定數據在磁盤中的存儲位置。
? defaultCache:當借助CacheManager.add("demoCache")創建Cache時,EhCache便會采用<defalutCache/>指定的的管理策略
以下屬性是必須的:
? maxElementsInMemory - 在內存中緩存的element的最大數目
? maxElementsOnDisk - 在磁盤上緩存的element的最大數目,若是0表示無窮大
? eternal - 設定緩存的elements是否永遠不過期。如果為true,則緩存的數據始終有效,如果為false那么還要根據timeToIdleSeconds,timeToLiveSeconds判斷
? overflowToDisk - 設定當內存緩存溢出的時候是否將過期的element緩存到磁盤上
以下屬性是可選的:
? timeToIdleSeconds - 當緩存在EhCache中的數據前后兩次訪問的時間超過timeToIdleSeconds的屬性取值時,這些數據便會刪除,默認值是0,也就是可閑置時間無窮大
? timeToLiveSeconds - 緩存element的有效生命期,默認是0.,也就是element存活時間無窮大
diskSpoolBufferSizeMB 這個參數設置DiskStore(磁盤緩存)的緩存區大小.默認是30MB.每個Cache都應該有自己的一個緩沖區.
? diskPersistent - 在VM重啟的時候是否啟用磁盤保存EhCache中的數據,默認是false。
? diskExpiryThreadIntervalSeconds - 磁盤緩存的清理線程運行間隔,默認是120秒。每個120s,相應的線程會進行一次EhCache中數據的清理工作
? memoryStoreEvictionPolicy - 當內存緩存達到最大,有新的element加入的時候, 移除緩存中element的策略。默認是LRU(最近最少使用),可選的有LFU(最不常使用)和FIFO(先進先出)


4.在UserMapper.xml中開啟二緩存,UserMapper.xml下的sql執行完成會存儲到它的緩存區域(HashMap)

  根據需求調整緩存參數:

1 <cache type="org.mybatis.caches.ehcache.EhcacheCache" > 2 <property name="timeToIdleSeconds" value="3600"/> 3 <property name="timeToLiveSeconds" value="3600"/> 4 <!-- 同ehcache參數maxElementsInMemory --> 5 <property name="maxEntriesLocalHeap" value="1000"/> 6 <!-- 同ehcache參數maxElementsOnDisk --> 7 <property name="maxEntriesLocalDisk" value="10000000"/> 8 <property name="memoryStoreEvictionPolicy" value="LRU"/> 9 </cache>

?

log4j打印如下日志,說明緩存開啟成功:

DEBUG [main] - Cache Hit Ratio [cn.itcast.jdbc.mapper.UserMapper]: 0.0


應用場景:
  對于訪問多的查詢請求且用戶對查詢結果實時性要求不高,此時可采用mybatis二級緩存技術降低數據庫訪問量,提高訪問速度,業務場景比如:耗時較高的統計分析sql、電話賬單查詢sql等。
實現方法如下:通過設置刷新間隔時間,由mybatis每隔一段時間自動清空緩存,根據數據變化頻率設置緩存刷新間隔flushInterval,比如設置為30分鐘、60分鐘、24小時等,根據需求而定。


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

  緩存都是實現了Cache這個接口.....

  public class EhCache implements Cache{}

作者:little飛 出處:http://www.cnblogs.com/little-fly/ 歡迎轉載 也請保留這段聲明 謝謝!

轉載于:https://www.cnblogs.com/little-fly/p/6251439.html

總結

以上是生活随笔為你收集整理的[原创]mybatis中整合ehcache缓存框架的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。