大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 MyBatis緩存機制

MyBatis緩存機制

更新時間:2021-07-06 16:21:57 來源:動力節(jié)點 瀏覽1071次

簡介:

mybatis提供查詢緩存,用于減輕數(shù)據(jù)庫壓力,提高數(shù)據(jù)庫性能mybatis提供一級緩存和二級緩存

一級緩存:sqlsession級別的緩存

在操作數(shù)據(jù)庫時,需要構(gòu)造sqlsession對象,在對象中有一個數(shù)據(jù)結(jié)構(gòu)(HashMap)用于存儲緩存數(shù)據(jù)不同的sqlsession之間的緩存區(qū)域是互相不影響的。

二級緩存:mapper級別的緩存

多個sqlsession去操作同一個mapper的sql語句,多個sqlsession可以共用二級緩存,所得到的數(shù)據(jù)會存在二級緩存區(qū)域,二級緩存是跨sqlsession的二級緩存相比一級緩存的范圍更大(按namespace來劃分),多個sqlsession可以共享一個二級緩存

mybatis緩存

為什么要用緩存?

如果緩存中有數(shù)據(jù),就不用從數(shù)據(jù)庫獲取,大大提高系統(tǒng)性能。

一級緩存工作原理:

圖解:

mybatis緩存

操作過程:

第一次發(fā)起查詢sql查詢用戶id為1的用戶,先去找緩存中是否有id為1的用戶,如果沒有,再去數(shù)據(jù)庫查詢用戶信息。得到用戶信息,將用戶信息存儲到一級緩存中。

如果sqlsession執(zhí)行了commit操作(插入,更新,刪除),會清空sqlsession中的一級緩存,避免臟讀

第二次發(fā)起查詢id為1的用戶,緩存中如果找到了,直接從緩存中獲取用戶信息

mybatis默認支持一級緩存。

二級緩存實現(xiàn)原理

圖解:

mybatis緩存

首先要手動開啟mybatis二級緩存。

在config.xml設(shè)置二級緩存開關(guān) , 還要在具體的mapper.xml開啟二級緩存

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

2.需要將映射的javapojo類實現(xiàn)序列化
          class Student implements Serializable{}

3.<!--開啟本Mapper的namespace下的二級緩存-->
<cache eviction="LRU" flushInterval="10000"/>

cache屬性的簡介:

eviction:代表的是緩存回收策略,目前MyBatis提供以下策略。

(1)LRU(Least Recently Used),最近最少使用的,最長時間不用的對象

(2)FIFO(First In First Out),先進先出,按對象進入緩存的順序來移除他們

(3)SOFT,軟引用,移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對象

(4)WEAK,弱引用,更積極的移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對象。這里采用的是LRU,

移除最長時間不用的對形象

flushInterval:刷新間隔時間,單位為毫秒,這里配置的是100秒刷新,如果你不配置它,那么當

SQL被執(zhí)行的時候才會去刷新緩存。

size:引用數(shù)目,一個正整數(shù),代表緩存最多可以存儲多少個對象,不宜設(shè)置過大。設(shè)置過大會導(dǎo)致內(nèi)存溢出。

這里配置的是1024個對象

readOnly:只讀,意味著緩存數(shù)據(jù)只能讀取而不能修改,這樣設(shè)置的好處是我們可以快速讀取緩存,缺點是我們沒有

辦法修改緩存,他的默認值是false,不允許我們修改

操作過程:

sqlsession1查詢用戶id為1的信息,查詢到之后,會將查詢數(shù)據(jù)存儲到二級緩存中。

如果sqlsession3去執(zhí)行相同mapper下sql,執(zhí)行commit提交,會清空該mapper下的二級緩存區(qū)域的數(shù)據(jù)

sqlsession2查詢用戶id為1的信息,去緩存找是否存在緩存,如果存在直接從緩存中取數(shù)據(jù)

禁用二級緩存:

在statement中可以設(shè)置useCache=false,禁用當前select語句的二級緩存,默認情況為true

&lt;select id="getStudentById"parameterType="java.lang.Integer"resultType="Student"useCache="false"&gt;

在實際開發(fā)中,針對每次查詢都需要最新的數(shù)據(jù)sql,要設(shè)置為useCache="false",禁用二級緩存

flushCache標簽:刷新緩存(清空緩存)

<select id="getStudentById" parameterType="java.lang.Integer" resultType="Student" flushCache="true">

一般下執(zhí)行完commit操作都需要刷新緩存,flushCache="true表示刷新緩存,可以避免臟讀

二級緩存應(yīng)用場景

對于訪問多的查詢請求并且用戶對查詢結(jié)果實時性要求不高的情況下,可采用mybatis二級緩存,降低數(shù)據(jù)庫訪問量,提高訪問速度,如電話賬單查詢

根據(jù)需求設(shè)置相應(yīng)的flushInterval:刷新間隔時間,比如三十分鐘,24小時等。。。

二級緩存局限性:

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

以上就是動力節(jié)點小編介紹的"MyBatis緩存機制",希望對大家有幫助,想了解更多可查看Mybatis基礎(chǔ)教程,如有疑問,請在線咨詢,有專業(yè)老師隨時為您服務(wù)。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 精品伊人久久大香线蕉网站 | 久久国产精品高清一区二区三区 | 青青草一区二区免费精品 | 国产精品日日做人人爱 | 亚洲成人国产精品 | 最近免费中文字幕大全免费版视频 | 日日综合网 | 国产成人精品亚洲一区 | 美女被a到爽视频在线观看 美女被cao的视频免费看 | 四虎国产精品永久免费网址 | 91视频国产精品 | 国产精品久久久久久久久免费 | 自拍 欧美 在线 综合 另类 | 欧美一级视频免费看 | 国产精品视频一区二区三区 | 一区二区三区在线播放视频 | 久久这里只有精品国产 | 国产a级网站 | 免费国产成人 | 欧美啊v | 欧美一区二区三区影院 | 国产在线麻豆一区二区 | 操操操综合网 | 日本高清不卡免费 | 偷偷狠狠的日日高清完整视频 | 欧美日韩三区 | 尹人综合网 | 欧美精品久久久久久久小说 | 四虎4hu影库免费永久国产 | 成人三级视频在线观看 | 亚洲精品在线观看视频 | 久久99这里精品8国产 | 国产成人香蕉 | 99九九精品视频 | 久久精热 | 国产精品日本一区二区在线播放 | 伊人一伊人色综合网 | 女人夜色黄网在线观看 | 人成午夜欧美大片免费视频 | 亚洲国产精品成人综合久久久 | 色狗综合 |