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}