首页 > 其他分享 >ibatis-LruCache

ibatis-LruCache

时间:2024-05-15 14:53:24浏览次数:24  
标签:eldestKey Map private ibatis delegate key size LruCache

核心对象

当Map存储key数量超出初始化设置的size时,标记最老的key,下次put时会自行删除eldest key。

Map<Object, Object> keyMap = new LinkedHashMap();

为什么使用LinkedHashMap?支持头、尾,快速获取头结点,从Map中快速删除数据。
实现removeEldestEntry方法,用于获取eldestKey。

putObject时,执行cycleKeyList方法,用于从map中删除eldestKey。

LinkedHashMap 带有头(transient eldest)、尾指针(transient youngest),数据存储到HashMap中。

源码如下:

public class LruCache implements Cache {

  private final Cache delegate;
  private Map<Object, Object> keyMap;
  private Object eldestKey;

  public LruCache(Cache delegate) {
    this.delegate = delegate;
    setSize(1024);
  }public void setSize(final int size) {
    keyMap = new LinkedHashMap<Object, Object>(size, .75F, true) {
      private static final long serialVersionUID = 4267176411845948333L;

      @Override
      protected boolean removeEldestEntry(Map.Entry<Object, Object> eldest) {
        boolean tooBig = size() > size;
        if (tooBig) {
          eldestKey = eldest.getKey();
        }
        return tooBig;
      }
    };
  }

  @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;
    }
  }

}

 

标签:eldestKey,Map,private,ibatis,delegate,key,size,LruCache
From: https://www.cnblogs.com/use-D/p/18152890

相关文章

  • ibatis-FifoCache
    核心代码Deque<Object>keyList=newLinkedList<>();为什么使用LinkedList?单向链表。使用LinkedList实现FIFO,支持头、尾节点的单向链表。添加时,判断数量大于初始化值时,删除头结点。源码:publicclassFifoCacheimplementsCache{privatefinalCachedelegate;pri......
  • LruCache源码解析
    最近被问到LruCache原理一直觉得很简单的东西猛然一想,卧槽忘了,赶紧翻开源码瞧瞧!1、首先构造lrucache的时候会新建一个linkedHashMap来作为存储容器publicLruCache(intmaxSize){if(maxSize<=0){thrownewIllegalArgumentException("maxSize<=......
  • Mybatis-plus构建wrapper条件时出现索引越界异常Caused by: org.apache.ibatis.except
    项目场景:学习springboot整合mybatis-plus时通过构建器执行相关操作@AutowiredBookMappermapper;@Testvoidtest(){QueryWrapper<Book>wrapper=newQueryWrapper<>();wrapper.select("id","name","press")//只查询前三......
  • Caused by: org.apache.ibatis.reflection.ReflectionException: Error parsing prope
    问题描述1、编译过程是不会被发现的;2、运行时报错:Causedby:org.apache.ibatis.reflection.ReflectionException:Errorparsingpropertyname'lambda$pages$4d14352e$1'.Didn'tstartwith'is','get'or'set'。问题分析MyBatis-Plus的条件构造器常用......
  • springcloud项项目使用脚本启动.sh,报错nested exception is org.apache.ibatis.excep
    问题:项目在使用java-jar启动每个jar包时,项目可正常访问,但要改为使用脚本,启动时,程序就报这个错了nestedexceptionisorg.apache.ibatis.exceptions.PersistenceException:###Errorqueryingdatabase.Cause:com.baomidou.dynamic.datasource.exception.CannotFindDataSource......
  • nested exception is org.apache.ibatis.type.TypeException: Could not set paramete
    org.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.type.TypeException:Couldnotsetparametersformapping:ParameterMapping{property='name',mode=IN,javaType=classjava.lang.String,jdbcType=null,numericScale=nu......
  • org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis
    Requestprocessingfailed;nestedexceptionisorg.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.binding.BindingException:Parameter'keyWord'notfound.Availableparametersare[keyword,param1] 错误原因:我在mapper里加......
  • idea报错,java: 程序包org.apache.ibatis.annotations不存在
    这个错误表明在你的项目中,IDEA找不到MyBatis的注解包org.apache.ibatis.annotations。这个包通常包含了一些MyBatis的注解,比如@Select、@Insert等,用于在接口中定义SQL查询或操作。解决这个问题的方法有几个:1.检查MyBatis依赖:确保在你的Maven或Gradle项目中正确......
  • mybatisPlus报orq.apache ibatisbinding.BindingException: Invalid bound statement
     出现这种问题依次检查下列内容1.检查xml映射文件中标签绑定包名地址是否正确(即namespace的值)2.检查xxxMapper接口中的方法,对应xml映射文件中是否有3.检查标签中的resultType是否与xxxMapper接口中的方法返回值类型一致,若一个是对象一个是集合,那也会报错~4.检查yml配置文件中......
  • org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
    org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):com.tl666.comments.mapper.CommentsMapper.addRootComments2023-04-1213:40:06.160ERROR31228---[nio-8080-exec-2]o.a.c.c.C.[.[.[/].[dispatcherServlet]:Servlet.service()......