久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MyBatis緩存實(shí)現(xiàn)原理及代碼實(shí)例解析

瀏覽:113日期:2023-10-23 08:10:51

一、一級(jí)緩存(本地緩存)

sqlSession級(jí)別的緩存。一級(jí)緩存是一直開(kāi)啟的;SqlSession級(jí)別的一個(gè)Map與數(shù)據(jù)庫(kù)同一次會(huì)話期間查詢到的數(shù)據(jù)會(huì)放在本地緩存中。以后如果需要獲取相同的數(shù)據(jù),直接從緩存中拿,沒(méi)必要再去查詢數(shù)據(jù)庫(kù);

一級(jí)緩存失效情況(沒(méi)有使用到當(dāng)前一級(jí)緩存的情況,效果就是,還需要再向數(shù)據(jù)庫(kù)發(fā)出查詢):

1、sqlSession不同

2、sqlSession相同,查詢條件不同。(當(dāng)前一級(jí)緩存中還沒(méi)有這個(gè)數(shù)據(jù))

3、sqlSession相同,兩次查詢之間執(zhí)行了增刪改操作(這次增刪改可能對(duì)當(dāng)前數(shù)據(jù)有影響)

4、sqlSession相同,手動(dòng)清除了一級(jí)緩存。

二、二級(jí)緩存(全局緩存)

基本namespace級(jí)別的緩存:一個(gè)namespace對(duì)應(yīng)一個(gè)二級(jí)緩存:

工作機(jī)制:

1、一個(gè)會(huì)話,查詢一條數(shù)據(jù),這個(gè)數(shù)據(jù)就會(huì)被放在當(dāng)前會(huì)話的一級(jí)緩存中:

2、如果會(huì)話關(guān)閉:一級(jí)會(huì)話中的緩存會(huì)被保存到二級(jí)緩存中;新的會(huì)話查詢信息,就可以參照二級(jí)緩存中的內(nèi)容。

3、不同namespace查出的數(shù)據(jù)會(huì)放在自己對(duì)應(yīng)的緩存中(map)

效果:數(shù)據(jù)會(huì)從二級(jí)緩存中獲取,查出的數(shù)據(jù)會(huì)默認(rèn)先放在一級(jí)緩存中,只有會(huì)話提交或者關(guān)閉以后,一級(jí)緩存中的數(shù)據(jù)才會(huì)轉(zhuǎn)移到二級(jí)緩存中

4、如何開(kāi)啟二級(jí)緩存:

①開(kāi)啟全局二級(jí)緩存配置:

<setting name='cacheEnabled' value='true'/>

②去mapper.xml中配置使用二級(jí)緩存:

<cache></cache>

③對(duì)應(yīng)的POJO實(shí)現(xiàn)序列化接口

5、和緩存有關(guān)的設(shè)置屬性

①cacheEnabled=true:false:關(guān)閉緩存(二級(jí)緩存關(guān)閉)(一級(jí)緩存一直可用的)

②每個(gè)select標(biāo)簽都有useCache='true':false:不使用緩存(一級(jí)緩存依然使用,二級(jí)緩存不使用)

③ 每個(gè)增刪改標(biāo)簽的:flushCache='true':(一級(jí)二級(jí)都會(huì)清除)

④sqlSession.clearCache();只是清楚當(dāng)前session的一級(jí)緩存;

⑤全局配置localCacheScope:

本地緩存作用域:(一級(jí)緩存SESSION);當(dāng)前會(huì)話的所有數(shù)據(jù)保存在會(huì)話緩存中;

STATEMENT:可以禁用一級(jí)緩存。

6、第三方緩存整合

①導(dǎo)入第三方緩存包即可;

②導(dǎo)入與第三方緩存整合的適配包;官方有;

③mapper.xml中使用自定義緩存

使用Ehcache緩存框架

<cache type='org.mybatis.caches.ehcache.EhcacheCache'></cache>

7、cache標(biāo)簽配置參數(shù): 

<cache eviction='FIFO' flushInterval='60000' readOnly='false' size='1024'></cache>

eviction:緩存的回收策略:

• LRU ? 最近最少使用的:移除最長(zhǎng)時(shí)間不被使用的對(duì)象。• FIFO ? 先進(jìn)先出:按對(duì)象進(jìn)入緩存的順序來(lái)移除它們。• SOFT ? 軟引用:移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對(duì)象。• WEAK ? 弱引用:更積極地移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對(duì)象。• 默認(rèn)的是 LRU。

flushInterval:緩存刷新間隔

緩存多長(zhǎng)時(shí)間清空一次,默認(rèn)不清空,設(shè)置一個(gè)毫秒值。

readOnly:是否只讀:

true:只讀;mybatis認(rèn)為所有從緩存中獲取數(shù)據(jù)的操作都是只讀操作,不會(huì)修改數(shù)據(jù)。mybatis為了加快獲取速度,直接就會(huì)將數(shù)據(jù)在緩存中的引用交給用戶。不安全,速度快。

false:非只讀:mybatis覺(jué)得獲取的數(shù)據(jù)可能會(huì)被修改。mybatis會(huì)利用序列化&反序列的技術(shù)克隆一份新的數(shù)據(jù)給你。安全,速度慢

size:緩存存放多少元素;

type='':指定自定義緩存的全類(lèi)名;實(shí)現(xiàn)Cache接口即可;

三、ehcache.xml配置

<?xml version='1.0' encoding='UTF-8'?><ehcache xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='../config/ehcache.xsd'> <!-- 磁盤(pán)保存路徑 --> <diskStore path='java.io.tmpdir'/> <defaultCache maxElementsInMemory='1' maxElementsOnDisk='10000000' eternal='false' overflowToDisk='true' timeToIdleSeconds='120' timeToLiveSeconds='120' diskExpiryThreadIntervalSeconds='120' memoryStoreEvictionPolicy='LRU'> </defaultCache></ehcache>

屬性說(shuō)明:l diskStore:指定數(shù)據(jù)在磁盤(pán)中的存儲(chǔ)位置。l defaultCache:當(dāng)借助CacheManager.add('demoCache')創(chuàng)建Cache時(shí),EhCache便會(huì)采用<defalutCache/>指定的的管理策略

以下屬性是必須的:l maxElementsInMemory - 在內(nèi)存中緩存的element的最大數(shù)目l maxElementsOnDisk - 在磁盤(pán)上緩存的element的最大數(shù)目,若是0表示無(wú)窮大l eternal - 設(shè)定緩存的elements是否永遠(yuǎn)不過(guò)期。如果為true,則緩存的數(shù)據(jù)始終有效,如果為false那么還要根據(jù)timeToIdleSeconds,timeToLiveSeconds判斷l(xiāng) overflowToDisk - 設(shè)定當(dāng)內(nèi)存緩存溢出的時(shí)候是否將過(guò)期的element緩存到磁盤(pán)上

以下屬性是可選的:l timeToIdleSeconds - 當(dāng)緩存在EhCache中的數(shù)據(jù)前后兩次訪問(wèn)的時(shí)間超過(guò)timeToIdleSeconds的屬性取值時(shí),這些數(shù)據(jù)便會(huì)刪除,默認(rèn)值是0,也就是可閑置時(shí)間無(wú)窮大l timeToLiveSeconds - 緩存element的有效生命期,默認(rèn)是0.,也就是element存活時(shí)間無(wú)窮大diskSpoolBufferSizeMB 這個(gè)參數(shù)設(shè)置DiskStore(磁盤(pán)緩存)的緩存區(qū)大小.默認(rèn)是30MB.每個(gè)Cache都應(yīng)該有自己的一個(gè)緩沖區(qū).l diskPersistent - 在VM重啟的時(shí)候是否啟用磁盤(pán)保存EhCache中的數(shù)據(jù),默認(rèn)是false。l diskExpiryThreadIntervalSeconds - 磁盤(pán)緩存的清理線程運(yùn)行間隔,默認(rèn)是120秒。每個(gè)120s,相應(yīng)的線程會(huì)進(jìn)行一次EhCache中數(shù)據(jù)的清理工作l memoryStoreEvictionPolicy - 當(dāng)內(nèi)存緩存達(dá)到最大,有新的element加入的時(shí)候, 移除緩存中element的策略。默認(rèn)是LRU(最近最少使用),可選的有LFU(最不常使用)和FIFO(先進(jìn)先出)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

相關(guān)文章:
主站蜘蛛池模板: 黄a在线看 | 亚洲美女视频 | 欧美一级免费在线观看 | av超碰| 一级片网 | 亚洲欧美影院 | 国产aⅴ| 日日操狠狠操 | 国产一区在线免费观看 | 一区中文字幕 | 日本一本视频 | 日韩一区二区在线观看 | www312aⅴ欧美在线看 | 亚洲大奶网 | 正在播放国产一区 | 在线视频亚洲 | 亚洲97| 狠狠影院 | 国产精品精品视频 | 国产精品一区二区三区四区 | 成人日韩 | 久久综合九色综合欧美狠狠 | 久久久久国产精品一区二区 | av一区二区在线观看 | 国产成人精品一区二区视频免费 | www.日韩精品.com | 成年免费观看视频 | 亚洲欧洲成人 | 亚洲精品区| 日韩激情一区二区 | www.国产| 国产精品com | 久久久99久久久国产自输拍 | 国产一级纯肉体一级毛片 | 污视频在线免费观看 | 最新中文字幕在线 | 99热新| 在线成人免费视频 | 日韩婷婷 | 国产精品久久久久久吹潮 | 亚洲污视频|