Mybatis 二代cache之LRU
LRU算法,删除最老的,即使用频率很低的key。
1、底层采用LinkedHashMap实现:
mybatis实现了LinkedHashMap的构造方法,最后一个参数accessOrder为true则开启LRU算法。
重写removeEldestEntry方法,当size()大于当前设置值返回true。
2、LinkedHashMap中双线链表结构,head表示当前最老的节点。
每次get或put时,如果accessOrder为true则调用afterNodeAccess(),将当前节点移到链表末尾。
然后当put、compute时调用afterNodeInsertion()删除head节点。
3、LinekedHashMap继承自HashMap,HashMap未实现afterNodeAccess(),afterNodeInsertion(),
LinekedHashMap中实现具体逻辑,然后删除时,还是调用HashMap的removeNode()。