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