首页 > 编程知识 正文

LMS算法,缓存淘汰算法

时间:2023-05-03 15:37:14 阅读:127807 作者:4665

1、Lru算法简介:(LinkedHashMap实现)

由下链表和HashMap实现,需要插入新数据项的接收时,将新数据项存在于链表中时,将该节点移动到链表的开头,不存在时,创建新节点并放置在链表的开头缓存已满后,删除链表中的最后一个节点。 访问数据时,如果数据表中存在数据项,则将该节点移动到链表的开头,否则返回-1。

因此,位于链表末尾的节点是最近未访问的数据项,利用该特性可以实现集合缓存,使集合中的数据大小不超过容器本身的容量,集合中的数据总是最新的,也是最大的

LinkedHashMap的基础是通过向您的HashMap添加双列表实现的,它本身按照访问顺序实施存储。 此外,LinkedHashMap还实现了直接返回false而不删除元素的方法removeEldestEntry,以确定是否需要删除最少读取的次数。 因此,当缓存已满时,必须重写删除最不常用数据项的方法。

2、Lru算法的实现

import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; /** * Lru缓存处理工具类* * @ paramk * @ paramv */publicclasslrutilk,v { privatefinalintmax _ cache _ size; privatefinalfloatdefault _ load _ factory=0.75 f; 私有链接hashmapk,V map; 复盖初始化/***LRU对象高速缓存大小的removeEldestEntry方法,缺省情况下将其设置为false。 * * @ param cachesize */publiclrutil (int cachesize ) () ) ) ) 65 intcapacity=(int ) math.ceil (max ) map=new LinkedHashMapK,v (容量,DEFAULT_LOAD_FACTORY,true (@ overrideprotectedbooleanremoveldestentry ) ) mmm ; } /** *将数据放入缓存对象* * @ param key * @ param value */publicsynchronizedvoidput (kkey,V value ) map.put ) key,value }/***key到value * * @ param key * @ return */publicsynchronizedvget (kkey ) ) returnmap.get ) key ); }/* * *根据key从缓存中删除数据* * @ param key */publicsynchronizedvoidremove (kkey ) ) map.remove (key ) key ); } /** *获取缓存中的所有数据* * @ return */publicsynchronizedsetmap.entryk,vgetall({returnmap.entryset ) }; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。