天天看點

一級緩存,二級緩存

一級緩存:

                 是在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>