mybatis緩存機制

一級緩存(本地緩存,開啓)sql

二級緩存手動開啓和配置,基於namespace級別的緩存數據庫

一級緩存(本地緩存):sqlsession級別的緩存,一級緩存是一直開啓的(與數據庫同一個會話期間查詢到的數會放在本地緩存中)緩存

相同數據只需從本地緩存中拿,不須要查詢數據庫session

一緩:一、sqlSession不一樣mybatis

            二、sqlSession相同,查詢條件不一樣app

            三、sqlsession相同,兩次查詢之間執行了增刪改操做lua

            四、sqlSession相同,手動清除了一級(緩存清空)spa

二級緩存(全局緩存):基於namespase級別的緩存,一個namespace對應一個二級緩存xml

              工做機制:一、查詢一條數據,這個數就會被放在當前會話的一級緩存接口

                                   二、若是會話關閉,一級緩存會被保存到三級緩存,新的會話查詢信息

                                   三、sqlSession==EmployeeMapper====>Employee

一、<setting   name="cacheEnabled"    value="true"  />

 二、在mapper.xml中配置使用二級緩存

        <cache    eviction="FIFO"     flushInterval="6000"   readOnly">

 三、pojo實現序列化接口

eviction  :緩存的回收策略    LRU:最近最少使用

                                                    FIFO:先進先出

                                                    SOFT:軟引用

                                                    WEAK:弱引用

readonly:是否只讀

                  true:只讀,mybatis認爲全部從數據的操做都是隻讀操做,不修改數據

                  false:非只讀,mybatis獲取的數據可能會被修改

size:緩存存放多少元素

type:指自定義緩存的全類名

fluashInternal:緩存刷新間隔(緩存多長時間清空一次)

效果:數據會從二級緩存中獲取

            查出的數據都會被默認放在一級緩存中

           只有會話提交或者關閉之後,一級緩存中的數據纔會轉移到二級緩存

緩存屬性:一、cacheEnable:false  關閉緩存(二級緩存)一級緩存不可用

                     二、每一個select標籤都有useCache=」true「           false    一級緩存依然使用,二級緩存不可用

                     三、每一個增刪改標籤flushcache="true"     增刪改標籤執行完成後清除緩存(一級緩存、二級緩存都清除)

                     四、查詢標籤flushcache="false"若是flushcache=true(每次查詢都清除緩存)

                     五、sqlsession.clearcache():只清除session的一級緩存

                     六、localcachescope:本地緩存做用域:當前會話全部數據保存在當前緩存中

相關文章
相關標籤/搜索