1、读Mybatis源码--cache缓存

本文介绍了两种常见的缓存算法实现:LruCache基于最少使用的淘汰机制,利用LinkedHashMap管理缓存;FifoCache采用先进先出策略,通过LinkedList维护缓存。详细阐述了它们的构造方法和淘汰机制的关键代码段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
    }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值