眾所周知,List僅僅會填充二級緩存,卻不能利用二級緩存,而iterator可以讀二級緩存,然而無法命中的話,效率卻很低。一個最好的辦法就是,第一次查詢使用List,隨后的查詢使用iterator,現在的問題是如何做到第一次查詢使用List,隨后查詢使用iterator。
先來考察一下緩存的作用:緩存之所以可以命中,前提條件是該數據被使用的非常頻繁,同時更新的可能性相當小,如果數據會頻繁修改,那么毫無疑問,緩存不會帶來任何好處。明確了這一點,我們就明白什么對象應該進行緩存了。顯然,對于那些經常會被訪問到的小批量的諸如基礎信息,用戶和權限信息是非常適合進行緩存的,這些數據我們可以在應用啟動的時候就執行一次list方法查詢,進行緩存填充(例如寫一個InitBean類進行數據緩存初始化),此外在數據被修改的時候,再次執行list方法,進行緩存填充。而在使用這些數據的其他地方,統統使用iterator方法。這樣就可以實現所謂的第一次查詢使用List,隨后的查詢使用iterator了。