Mybatis源码阅读之FIFO (FifoCache )



 

package org.apache.ibatis.cache.decorators;

import org.apache.ibatis.cache.Cache;

import java.util.LinkedList;

import java.util.concurrent.locks.ReadWriteLock;

/**

 * FIFO (first in, first out) cache decorator

 */

public class FifoCache implements Cache {

  private final Cache delegate;

  private final LinkedList<Object> keyList;

  private int size;

  public FifoCache(Cache delegate) {

    this.delegate = delegate;

    this.keyList = new LinkedList<Object>();

    this.size = 1024;

  }

  public String getId() {

    return delegate.getId();

  }

  public int getSize() {

    return delegate.getSize();

  }

  public void setSize(int size) {

    this.size = size;

  }

  public void putObject(Object key, Object value) {

    cycleKeyList(key);

    delegate.putObject(key, value);

  }

  public Object getObject(Object key) {

    return delegate.getObject(key);

  }

  public Object removeObject(Object key) {

    return delegate.removeObject(key);

  }

  public void clear() {

    delegate.clear();

    keyList.clear();

  }

  public ReadWriteLock getReadWriteLock() {

    return delegate.getReadWriteLock();

  }

  private void cycleKeyList(Object key) {

    keyList.addLast(key);

    if (keyList.size() > size) {

      Object oldestKey = keyList.removeFirst();

      delegate.removeObject(oldestKey);

    }

  }

}

猜你喜欢

转载自gaojingsong.iteye.com/blog/2335602