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()。

猜你喜欢

转载自www.cnblogs.com/codegod/p/8994076.html