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

posted @ 2018-05-05 11:03  川雨淅  阅读(199)  评论(0编辑  收藏  举报