乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      mysql緩存:一級(jí)緩存和二級(jí)緩存

       Levy_X 2018-09-26

      一級(jí)緩存:

        也稱本地緩存,sqlSession級(jí)別的緩存。一級(jí)緩存是一直開(kāi)啟的;與數(shù)據(jù)庫(kù)同一次回話期間查詢到的數(shù)據(jù)會(huì)放在本地緩存中。

        如果需要獲取相同的數(shù)據(jù),直接從緩存中拿,不會(huì)再查數(shù)據(jù)庫(kù)。

        一級(jí)緩存失效的四種情況:

          1.sqlSession不同。

            eg:

      1
      2
      3
      @Test
          public void test01() throws IOException {
              SqlSessionFactory sqlSessionFactry = getSqlSessionFactory(); <br>          SqlSession session = sqlSessionFactory.openSession();<br>          EmployeeMapper mapper = session.getMapper(EmployeeMapper.class); <br>          try { Employee map = mapper.getEmployeeById(1);<br>             Employee map2 = mapper.getEmployeeById(1);<br>          System.out.println(map == map2);<br>                session.commit(); <br>               } <br>               finally { session.close(); } <br>        } <br>輸出結(jié)果為true 數(shù)據(jù)庫(kù)只查詢一次,map2取緩存結(jié)果

        

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      @Test
          public void test01() throws IOException {
              SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
               SqlSession session = sqlSessionFactory.openSession();
                       SqlSession session2 = sqlSessionFactory.openSession();
               EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
                       EmployeeMapper mapper2 = session.getMapper(EmployeeMapper.class);
               try {
                   Employee map  = mapper.getEmployeeById(1);
                               Employee map2  = mapper.getEmployeeById(1);
                   System.out.println(map == map2);
                   session.commit();
                  } finally {
                      session.close();
                  }
          }
      輸出結(jié)果為false
      兩個(gè)不同的sqlSession

            2.sqlSession相同,查詢條件不同。因?yàn)榫彺鏃l件不同,緩存中還沒(méi)有數(shù)據(jù)。

            3.sqlSession相同,在兩次相同查詢條件中間執(zhí)行過(guò)增刪改操作。(因?yàn)橹虚g的增刪改可能對(duì)緩存中數(shù)據(jù)進(jìn)行修改,所以不能用)

            4.sqlSession相同,手動(dòng)清空了一級(jí)緩存。

              eg:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      @Test
          public void test01() throws IOException {
              SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
               SqlSession session = sqlSessionFactory.openSession();
               EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
               try {
                   Employee map  = mapper.getEmployeeById(1);
                               session.clearCache();
                               Employee map2  = mapper.getEmployeeById(1);
                   System.out.println(map == map2);
                   session.commit();
                  } finally {
                      session.close();
                  }
          }
      輸出結(jié)果為false.
      因?yàn)槭謩?dòng)清清除緩存,緩存失效

        二級(jí)緩存:全局緩存;基于namespace級(jí)別的緩存。一個(gè)namespace對(duì)應(yīng)一個(gè)二級(jí)緩存。

            工作機(jī)制:1.一個(gè)會(huì)話,查詢一條數(shù)據(jù),這個(gè)數(shù)據(jù)會(huì)被放在當(dāng)前會(huì)話的一級(jí)緩存中。

                 2,如果會(huì)話被關(guān)閉了,一級(jí)緩存中的數(shù)據(jù)會(huì)被保存帶二級(jí)緩存。新的會(huì)話查詢信息就會(huì)參照二級(jí)緩存。

                 3.sqlSession ====> Employee====>employee

                  sqlSession ====>DepartmentMapper=====>Department

                  不同的namespace查出的數(shù)據(jù)會(huì)放在自己對(duì)應(yīng)的緩存中。

                 效果:查出的數(shù)據(jù)首先放在一級(jí)緩存中,只有一級(jí)緩存被關(guān)閉或者提交以后,一級(jí)緩存數(shù)據(jù)才會(huì)轉(zhuǎn)移到二級(jí)緩存

               使用步驟:

                  1.開(kāi)啟全局緩存配置。<settings><setting name='cacheEnabled' value='true'/></settings>

                  2.因?yàn)槭莕amespace級(jí)別,需要搭配每個(gè)xxxMapper.xml中配置二級(jí)緩存<cache></cache>

                   <cache flushInterval='60000' size='512' readOnly='true' eviction='FIFO' type='' />

                    eviction:緩存的回收策略:

                           LRU – 最近最少使用的:移除最長(zhǎng)時(shí)間不被使用的對(duì)象。

                           FIFO – 先進(jìn)先出:按對(duì)象進(jìn)入緩存的順序來(lái)移除它們。

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

                           WEAK – 弱引用:更積極地移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對(duì)象。

                    flushInterval:緩存刷新間隔。緩存多久清空一次,默認(rèn)不清空。設(shè)置一個(gè)毫秒值。

                    readOnly:是否只讀。true:mybatis認(rèn)為所有從緩存中獲取數(shù)據(jù)的操作都是只讀操作,不會(huì)修改數(shù)據(jù)。

                                   mybatis為了加快獲取速度,直接就會(huì)將數(shù)據(jù)在緩存中的引用交給用戶。不安全,速度快。

                              false:mybatis覺(jué)得獲取的數(shù)據(jù)可能被修改。mybatis會(huì)利用序列化和反序列化的技術(shù)克隆一份新的數(shù)據(jù)給用戶。安全,速度快。

                    size:緩存放多少元素。

                    type:指定自定義緩存全類名。實(shí)現(xiàn)cache接口即可。

                    3.pojo需要實(shí)現(xiàn)序列換接口。

              和緩存相關(guān)的配置/屬性:

                    1.cacheEnabled:如果是false,關(guān)閉二級(jí)緩存,不關(guān)閉一級(jí)緩存。

                    2.每個(gè)select標(biāo)簽都有userCache='true'屬性:對(duì)一級(jí)緩存沒(méi)有影響。設(shè)置為false,二級(jí)緩存失效。

                    3.每個(gè)增刪改標(biāo)簽都有flushCache='true'屬性:一級(jí)緩存和二級(jí)緩存都會(huì)被清空。

                    4.在查詢標(biāo)簽中flushCache='false'屬性:如果設(shè)置為true,查完會(huì)清空,一級(jí)二級(jí)緩存都會(huì)被清空,都不會(huì)用緩存。

                    5.sqlSession.clearn():跟session有關(guān),只會(huì)清除一級(jí)緩存。

                    6.localCacheScope:<settings><setting name='localCacheScope' value='SESSION'/></settings>本地緩存作用域。

                              一級(jí)緩存SESSION:當(dāng)前會(huì)話的所有數(shù)據(jù)保存到回話緩存中。STATEMENT:禁用一級(jí)緩存。

       

      緩存首先一進(jìn)來(lái)去查二級(jí)緩存,二級(jí)緩存沒(méi)有去找一級(jí)緩存,一級(jí)緩存沒(méi)有去找數(shù)據(jù)庫(kù)。二級(jí)緩存----->一級(jí)緩存-------->數(shù)據(jù)庫(kù)。

      自定義緩存 implements Cache,重寫接口中的保存等方法,比如說(shuō)保存到redis.

      自定義緩存參照mybatis官網(wǎng)--->項(xiàng)目git代碼庫(kù)----->https://github.com/mybatis---->參照各種整合緩存

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多