1、读Mybatis源码--cache缓存

1、LruCache

基于最少使用的淘汰机制的缓存算法
实现方法

public void setSize(final int size) {
    // LinkedHashMap的一个构造函数,当参数accessOrder为true时,即会按照访问顺序排序,最近访问的放在最前,最早访问的放在后面
    keyMap = new LinkedHashMap<Object, Object>(size, .75F, true) {
      private static final long serialVersionUID = 4267176411845948333L;
      // LinkedHashMap自带的判断是否删除最老的元素方法,默认返回false,即不删除老数据
      // 重写这个方法,当满足一定条件时删除最老的键
      @Override
      protected boolean removeEldestEntry(Map.Entry<Object, Object> eldest) {
        boolean tooBig = size() > size;
        if (tooBig) {
          eldestKey = eldest.getKey();
        }
        return tooBig;
      }
    };
  }

public Object getObject(Object key) {
    keyMap.get(key); // touch  // 刷新 keyMap 的访问顺序
    return delegate.getObject(key);// 获得缓存值
  }

2、FifoCache

是基于先进先出的淘汰机制的 Cache 实现类
具体实现方法:

  //keyList设置为LinkedList
  private final Deque<Object> keyList=new LinkedList<>();
  private void cycleKeyList(Object key) {
    keyList.addLast(key);
    // 超过上限,将队首位移除
    if (keyList.size() > size) {
      Object oldestKey = keyList.removeFirst();
      delegate.removeObject(oldestKey);
    }
  }

你可能感兴趣的:(mybatis,缓存,java)