【学习笔记】mybatis中的缓存介绍和使用
文章目錄
- 介紹
- 一級緩存和二級緩存
- 讓一級緩存失效的方法
- 二級緩存的使用
- 清空或者跳過二級緩存的3種方式
介紹
什么是緩存?
緩存就是存儲數據的一個地方(稱作:Cache),當程序要讀取數據時,會首先從緩存中獲取,有則直接返回,否則從其他存儲設備中獲取,緩存最重要的一點就是從其內部獲取數據的速度是非常快的,通過緩存可以加快數據的訪問速度。比如我們從db中獲取數據,中間需要經過網絡傳輸耗時,db server從磁盤讀取數據耗時等,如果這些數據直接放在jvm對應的內存中,訪問是不是會快很多。
mybatis中的緩存
通常情況下mybatis會訪問數據庫獲取數據,中間涉及到網絡通信,數據庫從磁盤中讀取數據,然后將數據返回給mybatis,總的來說耗時還是挺長的,mybatis為了加快數據查詢的速度,在其內部引入了緩存來加快數據的查詢速度。
一級緩存和二級緩存
mybatis中分為一級緩存和二級緩存。
一級緩存是SqlSession級別的緩存,在操作數據庫時需要構造 sqlSession對象,在對象中有一個數據結構(HashMap)用于存儲緩存數據,不同的sqlSession之間的緩存數據區域(HashMap)是互相不影響的。每個SqlSession都有自己單獨的一級緩存,多個SqlSession之間的一級緩存是相互隔離的,互不影響,mybatis中一級緩存是默認自動開啟的。
一級緩存工作原理:在同一個SqlSession中去多次去執行同樣的查詢,每次執行的時候會先到一級緩存中查找,如果緩存中有就直接返回,如果一級緩存中沒有相關數據,mybatis就會去db中進行查找,然后將查找到的數據放入一級緩存中,第二次執行同樣的查詢的時候,會發現緩存中已經存在了,會直接返回。一級緩存的存儲介質是內存,是用一個HashMap來存儲數據的,所以訪問速度是非常快的
二級緩存是mapper級別的緩存,多個SqlSession去操作同一個Mapper的sql語句,多個SqlSession可以共用二級緩存,二級緩存是跨SqlSession的。
讓一級緩存失效的方法
1.當執行增刪改操時,mybatis會將當前SqlSession一級緩存中的所有數據都清除。
2.SqlSession.clearCache清理一級緩存
SqlSession.clearCache()方法會將當前SqlSession一級緩存中的所有數據清除。
3.Select元素的flushCache置為true
將Mapper xml中select元素的flushCache屬性置為true的時候,每次執行這個select元素對應的查詢之前,mybatis會將當前SqlSession中一級緩存中的所有數據都清除。注意:select元素這個屬性的默認值是false。
二級緩存的使用
一級緩存使用上存在局限性,必須要在同一個SqlSession中執行同樣的查詢,一級緩存才能提升查詢速度,如果想在不同的SqlSession之間使用緩存來加快查詢速度,此時我們需要用到二級緩存了。
一二級緩存共存時查詢原理
一二級緩存如果都開啟的情況下,數據查詢過程如下:
數據則直接返回,否則繼續向下
清空或者跳過二級緩存的3種方式
當二級緩存開啟的時候,在某個mapper xml中添加cache元素之后,這個mapper xml中所有的查詢都默認開啟了二級緩存,那么我們如何清空或者跳過二級緩存呢?3種方式如下:
總結
以上是生活随笔為你收集整理的【学习笔记】mybatis中的缓存介绍和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【算法学习笔记】堆排序和归并排序、其他几
- 下一篇: 【过程记录】springboot整合re