mybatis緩存:
從數據查詢數據時,會把結果放入緩存池。
在沒有對這個表進行修改操作時,調用同一個方法時,相同查詢語句會直接讀取緩存池中的結果。
當緩存池滿時,會把最近沒有被使用的緩存中的數據覆蓋掉。(LRU least recently used);
其中主要使用了linkedHashMap
仿照mybatis中的原理,可以自己利用LinkedHashMap寫一個LRU算法。
import java.util.*; public class test { public static void main(String[] arg){ testLinkedHashMap(); } public static void testLinkedHashMap() { LinkedHashMap<String, String> map = new LinkedHashMap<String, String>(5,0.75F ,true){ //第三個參數設為true時,在被使用時會把被使用的數據放到結尾。 @Override protected boolean removeEldestEntry(Map.Entry<String, String> var){ //該方法原本是默認返回false,會在put之后被執行,重寫該方法,在數據多於某個值時,返回true,刪除頭結點。 if(this.size() > 5){ return true; } return false; } }; map.put("aa", "1"); map.put("bb", "2"); map.put("cc", "3"); map.put("dd", "4"); System.out.println(map); map.get("cc"); System.out.println("=================使用cc=================="); System.out.println(map); map.get("bb"); System.out.println("=================使用bb==================="); System.out.println(map); map.put("ee","5"); System.out.println("=================加入ee==================="); System.out.println(map); map.put("ff","6"); System.out.println("=================加入ff==================="); System.out.println(map); } void print(LinkedHashMap<String, String> source) { source.keySet().iterator().forEachRemaining(System.out::println); } }
執行結果
{aa=1, bb=2, cc=3, dd=4}
=================使用cc==================
{aa=1, bb=2, dd=4, cc=3}
=================使用bb===================
{aa=1, dd=4, cc=3, bb=2}
=================加入ee===================
{aa=1, dd=4, cc=3, bb=2, ee=5}
=================加入ff===================
{dd=4, cc=3, bb=2, ee=5, ff=6}