這篇文章主要介紹“Mybatis二級緩存的缺陷是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Mybatis二級緩存的缺陷是什么”文章能幫助大家解決問題。
一級緩存默認是開啟的(但是整合了Spring,Mybatis的一級緩存默認就失效了)
二級緩存是要手動配置開啟的(二級緩存是mapper級別的緩存,可以跨SqlSession)
開啟二級緩存(xml方式):在*Mapper.xml中加入如下代碼
<!--eviction: 清空緩存的策略 readOnly: 是否只讀 flushInterval: 每個60秒刷新一次緩存 size: 內存大小,最多存儲結果對象或者列表的512個引用 --> <cache readOnly="true" eviction="FIFO" flushInterval="60000" size="512"/>
LRU – 最近最少使用:移除最長時間不被使用的對象。
FIFO – 先進先出:按對象進入緩存的順序來移除它們。
SOFT – 軟引用:基于垃圾回收器狀態和軟引用規則移除對象。
WEAK – 弱引用:更積極地基于垃圾收集器狀態和弱引用規則移除對象。
兩種方式二選一,如果都配置會報錯:Caches collection already contains value for com.lixianhe.dao.UserMapper
注意:使用Mybatis二級緩存必須是xml寫SQL語句,不能使用注解寫SQL語句
先從二級緩存中查詢,二級緩存沒有進入SqlSession中查詢
SqlSession沒有就去數據庫查詢,然后存到一級緩存中,查詢完關閉SqlSession
一級緩存再提交給二級緩存
在開啟二級緩存的情況下執行一條sql
select colA1, colA2, colB1, colB2 from A, B where ...
A表執行了上述的sql
B表更新了字段cloB1,colB2
A表再次執行了上述的sql(前提沒有執行insert、update、delete)
A表第二次就查詢出了臟數據(B表的數據就是臟數據),這個問題對二級緩存來說是一個無解的問題
因此Mybatis二級緩存的使用用一個前提,必須保證所有的增刪改查都在同一個namespace下才行
由于二級緩存的弊端,所以并不建議在實際生產中使用,而是在外部實現自己的緩存,如使用Redis做緩存
關于“Mybatis二級緩存的缺陷是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。