LRU

博客介绍了LRU缓存算法,其全称为Least Recently Used,即最近最少使用,该算法依据数据访问时间处理,若数据近期未被访问,未来被访问可能性小,还提及了使用LinkedList实现该算法。

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

LRU

全称

Least Recently Used,最近最少使用,如果一个数据在最近没有被访问到,那么在将来它被访问到的可能性也很小,根据访问的时间来处理的。

LinkedList实现

public class MyTest {

    // 缓存容量
    private final static int capacity = 3;

    // 缓存的key
    private static LinkedList<String> keys = new LinkedList<String>();

    public static void main(String[] args) {

        MyTest myTest = new MyTest();
        myTest.lru("a");
        myTest.lru("b");
        myTest.lru("c");
        myTest.lru("d");
        myTest.lru("b");
        System.out.println(Arrays.toString(keys.toArray()));
        // [b, d, c]

    }

    /**
     * 要访问的key,插入到头节点
     * 当key命中时,把key移动到头节点
     * 当容量满时,移除尾结点的数据
     */
    public void lru(String key){
        // 使用链表实现
        boolean containsFlag = keys.contains(key);
        // 如果不包含,则插入到头节点
        if(!containsFlag){
            // 如果超过了容量,则把尾结点移除
            if(keys.size() >= capacity){
                keys.removeLast();
            }
            // 插入到头节点中
            keys.addFirst(key);
        }else{
            // 如果包含,则把该元素移动到头节点
            // 先找到这个元素的索引位,然后移除,返回该元素添加到头节点
            keys.addFirst(keys.remove(keys.indexOf(key)));
        }
    }

}
03-11
### LRU缓存淘汰算法概述 在计算机科学领域,LRU(Least Recently Used)缓存淘汰算法被广泛应用于管理有限的缓存空间。当缓存达到其容量上限时,该算法会选择移除最长时间未被访问的数据项,以便为新数据腾出位置[^1]。 ### 实现原理 为了有效地追踪哪些条目是最不常使用的,通常采用哈希表与双向链表相结合的方式: - **哈希表**:提供快速查找功能,键映射到对应的节点。 - **双向链表**:维护元素的使用顺序,头部表示最新使用的元素,尾部则是最久未使用的元素。 每当有新的请求到来或者现有项目更新时,相应的记录会被移动至链表前端;而一旦超出设定的最大容量,则删除位于末端的老化节点[^2]。 #### Python代码实例 下面是一个简单的Python版本LRU Cache实现方式: ```python from collections import OrderedDict class LRUCache: def __init__(self, capacity: int): self.cache = OrderedDict() self.capacity = capacity def get(self, key: str) -> any: if key not in self.cache: return None value = self.cache.pop(key) # 将最近使用的元素移到最后 self.cache[key] = value return value def put(self, key: str, value: any) -> None: if key in self.cache: # 更新已有key的位置 self.cache.move_to_end(key) elif len(self.cache) >= self.capacity: # 移除最早添加的那个item (即第一个item) oldest_key = next(iter(self.cache)) del self.cache[oldest_key] self.cache[key] = value # 测试用例 cache = LRUCache(2) cache.put('a', 1) cache.put('b', 2) print(cache.get('a')) # 输出: 1 cache.put('c', 3) # 'b' 被丢弃因为它是最近最少使用的 print(cache.get('b')) # 输出: None ``` 此段程序展示了如何利用`OrderedDict`来构建一个简易版的支持固定大小并遵循LRU原则操作的对象集合。 ### 应用场景 LRU机制常见于多种计算环境之中,比如操作系统中的页面置换、数据库查询结果集缓冲以及Web服务器响应内容暂存等方面都有广泛应用。此外,在现代浏览器里也会运用类似的思路去处理资源加载优先级等问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值