spring+Mybatis+Ehcache整合實現(xiàn)數據緩存

《介紹1》:

一、 Mybatis+Ehcache配置

為了提高MyBatis的性能,有時候我們需要加入緩存支持,目前用的比較多的緩存莫過于ehcache緩存了,ehcache性能強大,而且位各種應用都提供了解決方案,在此我們主要是做查詢緩存,提高查詢的效率.

整合MyBatis和ehcache需要的jar包如下:

ehcache-core-2.4.4.jar

mybatis-ehcache-1.0.0.jar

slf4j-api-1.6.1.jar

slf4j-log4j12-1.6.2.jar

資源已上傳到百度網盤點擊此處下載蛾绎,其中包括了一些mybatis的jar包忱屑,log4j,mysql驅動等必須的包

將上述包加入項目之后纵苛,新建一個文件名锉桑,該文件名必須為ehcache.xml铺厨,放在類路徑下面,內容如下:

?-->

配置自定義緩存

name:Cache的唯一標識

maxElementsInMemory:緩存中允許創(chuàng)建的最大對象數

maxElementsOnDisk:磁盤中最大緩存對象數颈走,若是0表示無窮大

eternal:Element是否永久有效膳灶,一但設置了,timeout將不起作用,對象永不過期轧钓。

timeToIdleSeconds:緩存數據的鈍化時間序厉,也就是在一個元素消亡之前,

兩次訪問時間的最大時間間隔值毕箍,這只能在元素不是永久駐留時有效弛房,

如果該值是?0?就意味著元素可以停頓無窮長的時間。

timeToLiveSeconds:緩存數據的生存時間而柑,也就是一個元素從構建到消亡的最大時間間隔值文捶,???????????????????????????????這只能在元素不是永久駐留時有效,如果該值是0就意味著元素可以停頓無窮長的時間媒咳。

overflowToDisk:內存不足時粹排,是否啟用磁盤緩存。

diskPersistent:是否緩存虛擬機重啟期數據

diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔涩澡,默認是120秒

diskSpoolBufferSizeMB:這個參數設置DiskStore(磁盤緩存)的緩存區(qū)大小顽耳。默認是30MB。每個Cache都應該有自己的一個緩沖區(qū)

memoryStoreEvictionPolicy:緩存滿了之后的淘汰算法妙同。默認策略是LRU(最近最少使用)射富。你可以設置為FIFO(先進先出)或是LFU(較少使用)

maxElementsInMemory="10000"

eternal="false"

overflowToDisk="false"

timeToIdleSeconds="900"

timeToLiveSeconds="1800"

memoryStoreEvictionPolicy="LFU"?/>????-->

該文件是ehcache的配置文件,上面的注釋已經說得很清楚了,這里我用的是默認的配置

至此ehcache已經配置好了,然后只需要在你想要緩存的mapper配置文件里面加入以下內容,該查詢語句得到的結果將會被緩存

標簽二選一,第一個可以輸出日志,第二個不輸出日志?只要在對應的mapper配置文件中加入標簽即可-->?-->select?*?from?person?where?id=#{id}

這樣就對這個mapper里面的各種結果進行了緩存。程序中不需要修改任何地方粥帚。

這個過程不復雜胰耗,也沒什么難度,不過Mybatis的官方說的也太含糊了茎辐。附件下面有宪郊,需要的各種jar包已經包含。點擊下載附件拖陆。原文地址:http://qiuqiu0034.iteye.com/blog/1162952

二弛槐、 springMVC+mybatis+ehcache詳細配置

首先需要先需要兩個主要的jar包

ehcache-core-2.4.6.jar

mybatis-ehcache-1.0.1.jar

ehcache-core一定要1.3以上的版本 因為1.3之前好像不支持集群的。然后需要創(chuàng)建一個ehcache.xml在類路徑下面

配置自定義緩存

maxElementsInMemory:緩存中允許創(chuàng)建的最大對象數

eternal:緩存中對象是否為永久的依啰,如果是乎串,超時設置將被忽略,對象從不過期速警。

timeToIdleSeconds:緩存數據的鈍化時間叹誉,也就是在一個元素消亡之前,

兩次訪問時間的最大時間間隔值闷旧,這只能在元素不是永久駐留時有效长豁,

如果該值是?0?就意味著元素可以停頓無窮長的時間。

timeToLiveSeconds:緩存數據的生存時間忙灼,也就是一個元素從構建到消亡的最大時間間隔值匠襟,??????????????????????????????????????這只能在元素不是永久駐留時有效钝侠,如果該值是0就意味著元素可以停頓無窮長的時間。

overflowToDisk:內存不足時酸舍,是否啟用磁盤緩存帅韧。

memoryStoreEvictionPolicy:緩存滿了之后的淘汰算法。

-->

上面的diskStor path 你可以指定某一個路徑下啃勉,java.io.tmpdir 指的是你系統(tǒng)的緩存目錄忽舟,可以百度下然后一般這個xml都需要有一個defaultCache,就是默認的cache配置 ?里面有哪些參數自己可以網上查查api

然后下面我還配置了一個testCache淮阐,我找網上資料 沒看到哪里明說叮阅,然后我自己測試,發(fā)現(xiàn)ehcache是可以生成多個cache的泣特,每個cache可以根據不同的業(yè)務場景作用于不同的業(yè)務(即里面的參數配置不同),所以這樣看似多配置了,其實是更加增加了靈活性帘饶。

然后在spring的配置文件里面加上一段配置:

這樣就可以把ehcache和spring整合起來了

然后在對應的mapper.xml 里面加上

后面的參數配置不加也可以,都會有一個默認值群扶,大家也可以查查一共有哪些配置,然后根據自己的需要來配置镀裤,然后這個配置是會帶上cache執(zhí)行的日志竞阐,如果不要帶日志可以把LogginEhcache改成EhcacheCache。

在mapper.xml這樣設置了默認是全部操作都會執(zhí)行緩存策略暑劝,如果有某些sql不需要執(zhí)行骆莹,可以把useCache設置為false。

其實經過這樣的配置ehcache已經基本OK了担猛。接下來就測試一下幕垦。

原文測試代碼如下:

longbegin=?System.nanoTime();??????????tempService.selectAll();??????????longend=?System.nanoTime()?-begin;??????????System.out.println("count?:"+end);//the?second?timebegin=?System.nanoTime();??????????try?{??????????????tempService.insertTblUserTemp("1","1","1","1");??????????}?catch?(NoSuchAlgorithmException?e)?{??????????????e.printStackTrace();??????????}end=?System.nanoTime()?-begin;??????????System.out.println("count?:"+end);//the?second?timebegin=?System.nanoTime();??????????tempService.selectAll();end=?System.nanoTime()?-begin;??????????System.out.println("count?:"+end);//the?third?timebegin=?System.nanoTime();??????????tempService.selectAll();end=?System.nanoTime()?-begin;??????????System.out.println("count?:"+end);return"";

這里面有4條輸出語句

首先是查詢一次某表 ? ? 執(zhí)行了查詢sql

然后給某表插入一條信息 ?執(zhí)行了插入sql

然后再查詢某表 ? 執(zhí)行了查詢sql,這是正確的 ?因為你執(zhí)行了非查詢語句傅联,這個時候需要重新訪問數據庫

然后再一次查詢某表 ?沒有執(zhí)行查詢sql ? ?這代表緩存是有用的先改,他就沒有訪問數據庫了,直接從內存或者磁盤里面獲取了

也可以根據count來查看操作的時間

count :681719

————————————————-com.anenjoy.manage.mapper.TblUserTempMapper.insert

insert into TBLUSERTEMP (ACTIVECODE, PASSWORDMD5, PASSWORDRANDOMKEY,

PHONE, EMAIL, USERNAME,

AWARTAR, STATUS, CREATEDATE,

USERID, IMSI, CHECKCODE

)

values (?, ?, ?,

?, ?, ?,

?, ?, ?,

?, ?, ?

)

count :129557388

————————————————-com.anenjoy.manage.mapper.TblUserTempMapper.selectByExample

select

ACTIVECODE, PASSWORDMD5, PASSWORDRANDOMKEY, PHONE, EMAIL, USERNAME, AWARTAR, STATUS,

CREATEDATE, USERID, IMSI, CHECKCODE

from TBLUSERTEMP

count :333938203

count :560704

然后這些基本上OK了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蒸走,一起剝皮案震驚了整個濱河市仇奶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌比驻,老刑警劉巖该溯,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異别惦,居然都是意外死亡狈茉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門掸掸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氯庆,“玉大人,你說我怎么就攤上這事〉闱纾” “怎么了感凤?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粒督。 經常有香客問我陪竿,道長,這世上最難降的妖魔是什么屠橄? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任族跛,我火速辦了婚禮,結果婚禮上锐墙,老公的妹妹穿的比我還像新娘礁哄。我一直安慰自己,他們只是感情好溪北,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布桐绒。 她就那樣靜靜地躺著,像睡著了一般之拨。 火紅的嫁衣襯著肌膚如雪茉继。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天蚀乔,我揣著相機與錄音烁竭,去河邊找鬼。 笑死吉挣,一個胖子當著我的面吹牛派撕,可吹牛的內容都是我干的。 我是一名探鬼主播睬魂,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼终吼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了汉买?” 一聲冷哼從身側響起衔峰,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛙粘,沒想到半個月后垫卤,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡出牧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年穴肘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舔痕。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡评抚,死狀恐怖豹缀,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情慨代,我是刑警寧澤邢笙,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站侍匙,受9級特大地震影響氮惯,放射性物質發(fā)生泄漏。R本人自食惡果不足惜想暗,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一妇汗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧说莫,春花似錦杨箭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辽狈,卻和暖如春擒悬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稻艰。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侈净,地道東北人尊勿。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像畜侦,于是被迫代替她去往敵國和親元扔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容