眾所周知,List僅僅會(huì)填充二級(jí)緩存,卻不能利用二級(jí)緩存,而iterator可以讀二級(jí)緩存,然而無(wú)法命中的話,效率卻很低。一個(gè)最好的辦法就是,第一次查詢(xún)使用List,隨后的查詢(xún)使用iterator,現(xiàn)在的問(wèn)題是如何做到第一次查詢(xún)使用List,隨后查詢(xún)使用iterator。

先來(lái)考察一下緩存的作用:緩存之所以可以命中,前提條件是該數(shù)據(jù)被使用的非常頻繁,同時(shí)更新的可能性相當(dāng)小,如果數(shù)據(jù)會(huì)頻繁修改,那么毫無(wú)疑問(wèn),緩存不會(huì)帶來(lái)任何好處。明確了這一點(diǎn),我們就明白什么對(duì)象應(yīng)該進(jìn)行緩存了。顯然,對(duì)于那些經(jīng)常會(huì)被訪問(wèn)到的小批量的諸如基礎(chǔ)信息,用戶(hù)和權(quán)限信息是非常適合進(jìn)行緩存的,這些數(shù)據(jù)我們可以在應(yīng)用啟動(dòng)的時(shí)候就執(zhí)行一次list方法查詢(xún),進(jìn)行緩存填充(例如寫(xiě)一個(gè)InitBean類(lèi)進(jìn)行數(shù)據(jù)緩存初始化),此外在數(shù)據(jù)被修改的時(shí)候,再次執(zhí)行list方法,進(jìn)行緩存填充。而在使用這些數(shù)據(jù)的其他地方,統(tǒng)統(tǒng)使用iterator方法。這樣就可以實(shí)現(xiàn)所謂的第一次查詢(xún)使用List,隨后的查詢(xún)使用iterator了。