二級緩存簡介
它指的是Mybatis中SqlSessionFactory對象的緩存。由同一個SqlSessionFactory對象創(chuàng)建的SqlSession共享其緩存。
二級緩存是一個Mapper映射級別的緩存,多個SqlSession對同一個Mapper映射的sql語句進行操作,多個SqlSession可以共享二級緩存,二級緩存是交叉SqlSession。
二級緩存什么時候存入sqlsession關(guān)閉(close)后,sqlsession的一級緩存中的數(shù)據(jù)將被添加到命名空間的二級緩存中。
打開二級緩存后,還需要對緩存中的pojo實現(xiàn)Serializable接口,才能取出緩存中的數(shù)據(jù)進行反序列化操作,因為二級緩存的數(shù)據(jù)存儲介質(zhì)是多樣的,不一定只存在于內(nèi)存中,可能存在于硬盤中。
3. 二級緩存有過期時間,但沒有后臺線程來檢測它
需要注意的是,不是鍵值的過期時間,而是這個緩存的過期時間,也就是flushInterval,意味著整個緩存的緩存被清空,所以不需要后臺線程定時檢測。
每當數(shù)據(jù)被訪問時,就會檢查緩存的生存時間,默認是1小時,如果緩存已經(jīng)生存了1小時,那么整個緩存就會被清空。
4. 當Mybatis調(diào)用Dao層查詢數(shù)據(jù)庫時,它首先查詢二級緩存,該緩存沒有相應(yīng)的數(shù)據(jù),然后查詢一級緩存,該緩存也沒有數(shù)據(jù),最后到數(shù)據(jù)庫中去找。