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