一級緩存:
是在SqlSession事務中産生緩存機制
緩存查詢中的資料、select、還可以對參數不同進行緩存機制
commit或者rollback就會清楚緩存
clearCache() 清除緩存
update,insert,delete 緩存都會清理,重新積累
緩存的目的:
降低資料庫的通路量,資料庫壓力不會那麼大。
緩存一種優化方案。
叢集:
多伺服器
主從資料庫,一個負責讀一個負責寫等。
資料互相進行同步,通常是讀的多寫的少,是以可一添加多個讀取服務。
讀之是以比較慢是因為他需要進行資料運算
一級緩存作用域比較窄他隻作用與:
一個SqlSession中,在一級緩存中查詢,除了第一次加載資料庫,在查詢就會從記憶體中查詢。
将查詢過的放入記憶體,如果再用的話直接從記憶體中拿就行,隻要查詢就會緩存在記憶體,無論數量。
但是隻要執行更新語句就會打破一級緩存,不确定你的更新是否會影響的查詢(不确定資料的唯一性)
事務送出緩存也會清除
二級緩存:
1.在mybatis-config.xml中 設定二級緩存開關 true
2.如何讓你的select參與二級緩存? 在的mapper.xml寫上 <cache>
3.參與緩存,需要把你POJO類 實作序列化接口,以後可能會寫入硬碟
本身mybatis中也含有二級緩存元件
ehcache:
1.mapper.xml寫上 <cache type="org.mybatis.caches.ehcache.EhcacheCache">
2.加入ehcachejia包:
1.mybatis-ehcache.jar
2.ehcache的實作jar
3.可以在你的源碼根目錄下 建立ehcache.xml緩存配置
事務關閉他也會有緩存效果除非,發生更新、commit或者rollback就會清楚緩存
二級緩存是全局緩存
需要打開二級緩存,首先要在連接配接xml檔案中,設定一個标記(settings)

public class Stu implements Serializable {
//需要實作一個Serializable接口資料可以儲存在磁盤中
}
需要在你的映射檔案中添加一個緩存标記
二級緩存預設是開啟狀态
EhcacheCache緩存:
首先要在映射檔案中指定緩存類型
eh緩存在源碼包下配置一個xml檔案
<ehcache>
<!--<diskStore path="d:\\tempDirectory"/>-->
<!--
name: 設定緩存的名字,它的取值為類的全限定名或類的集合的名字
maxElementsInMemory: 設定基于記憶體的緩存中可存放的對象最大數目
eternal: 設定對象是否為永久的, true表示永不過期, 此時将忽略timeToIdleSeconds 和 timeToLiveSeconds屬性; 預設值是false
timeToIdleSeconds:設定對象空閑最長時間,以秒為機關, 超過這個時間,對象過期。當對象過期時,EHCache會把它從緩存中清除。如果此值為0,表示對象可以無限期地 處于空閑狀态。
timeToLiveSeconds:設定對象生存最長時間,超過這個時間,對象過期。如果此值為0,表示對象可以無限期地存在于緩存中.
該屬性值必須大于或等于 timeToIdleSeconds 屬性值
overflowToDisk:設定基于記憶體的緩存中的對象數目達到上限後,是否把溢出的對象寫到基于硬碟的緩存中
-->
<defaultCache
maxElementsInMemory="1000000000"
eternal="false"
timeToIdleSeconds="30"
timeToLiveSeconds="40"
overflowToDisk="false"
/>
</ehcache>