微前端架构如何改变企业的开发模式与效率提升
622
2022-10-19
聊聊Mybatis的缓存的其他装饰者
@[TOC]
聊聊Mybatis的缓存的其他装饰者
上篇文章说了Mybatis的缓存的被装饰者接口和对应实现类,还说了装饰器BlockingCache的实现,我们看一下其他装饰器
最近最少使用缓存装饰器
LruCache是最近最少使用缓存装饰器,它使用LinkedHashMap记录缓存的使用情况,LinkedHashMap底层的通过数组存储,当当前key使用了的时候,LinkedHashMap会将key移动到尾部,这样,头部的就是最近最久没有使用的key,当超过size后删除头部key
public void setSize(final int size) { keyMap = new LinkedHashMap
eldestKey用来存储需要删除的key,它重写LinkedHashMap的removeEldestEntry()方法,这个方法用来判断是否删除头部指针指向的key,如果超过size就把需要删除的key放入eldestKey中,LinkedHashMap删除key
存放元素
LruCache的putObject()方法:
@Override public void putObject(Object key, Object value) { delegate.putObject(key, value); cycleKeyList(key); } private void cycleKeyList(Object key) { keyMap.put(key, key); if (eldestKey != null) { delegate.removeObject(eldestKey); eldestKey = null; } }
调用被装饰者放入指定key,value存储, 把key放入LinkedHashMap中,如果eldestKey不为空的话删除缓存中key对应的value数据
先进先出策略的装饰器
FifoCache是先进先出策略的装饰器,它使用linkedList来记录key,并且有个size属性,默认1024,
存放元素
放缓存数据putObject()方法:
@Override public void putObject(Object key, Object value) { cycleKeyList(key); delegate.putObject(key, value); } private void cycleKeyList(Object key) { keyList.addLast(key); if (keyList.size() > size) { Object oldestKey = keyList.removeFirst(); delegate.removeObject(oldestKey); } }
调用cycleKeyList()方法:把key添加到LinkedList的尾部,如果链表长度超过size,移除头部元素,这就是先进先出 调用被装饰者的putObject()方法
总结
本篇文章主要讲了Mybatis缓存包下的两个装饰器缓存,LruCache是最近最久未使用的缓存装饰器,也就是它淘汰掉最近最少未使用的key,原理是利用的LinkedHashMap的removeEldestEntry()方法,他把对应的key都保存在LinkedHashMap中,用到的key会放到尾部,最近最久未使用的在头部,删除的时候就把头部的key淘汰了。另外一个装饰器缓存是FifoCache,它是先进先出的淘汰策略,原理是利用LinkedList来进行存储key,putObject()方法把可以放入尾部,超过最大限制删除头部key。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~