Python OrderedDict 实现 Least Recently used(LRU)缓存

OrderedDict 实现 Least Recently used(LRU)缓存

引言

LRU 缓存是一种缓存替换策略,当缓存空间不足时,会移除最久未使用的数据以腾出空间存放新的数据。LRU 缓存的特点:

  1. 有限容量:缓存拥有固定的容量,当容量满时,需要移除旧数据。
  2. 淘汰策略:将最久未使用的缓存项移除。
  3. 快速访问:访问,插入,删除的复杂度位 O(1)。

本文将介绍 OrderedDict 实现 Least Recently used(LRU)缓存的方法。

正文

python 复制代码
from collections import OrderedDict


class LRUCache:
    def __init__(self, capacity: int):
        self.cache = OrderedDict()
        self.capacity = capacity

    def get(self, key: str) -> int:
        if key not in self.cache:
            return -1
        self.cache.move_to_end(key)
        return self.cache[key]

    def put(self, key: str, value: int) -> None:
        if key in self.cache:
            self.cache.move_to_end(key)
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            self.cache.popitem(last=False)


if __name__ == '__main__':
    lru = LRUCache(2)
    lru.put('a', 1)
    lru.put('b', 2)
    print(lru.get('a'))  # 1
    lru.put('c', 3)
    print(lru.get('b'))  # -1

当使用 print(lru.get('a')) 语句输出结果时,键值对 'a':1 会被放在 OrderedDict 最后的位置,lru.put('c', 3) 会导致位于开始位置的元素 'b':2 被删除。当我们再次使用 print(lru.get('b')) 访问 'b':2 元素时会得到返回值 -1 提示我们当前缓存中已经不存在该元素。

如果大家觉得有用,就点个赞让更多的人看到吧~

相关推荐
mit6.82416 小时前
保持缓存的有效性
缓存
程序员三藏16 小时前
浅谈性能测试
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·性能测试
l12586516 小时前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain
meilindehuzi_a17 小时前
Python 基础语法(1):常量、变量、类型、输入输出与运算符
开发语言·python
Zane199417 小时前
调用了 async 函数却没执行?一文讲透协程、event loop 与 await
后端·python
OPEN-F17 小时前
Python进阶教程:装饰器与生成器深入
开发语言·python
zhipujiaoyu17 小时前
2026年大数据专科何去何从?就业前景、发展趋势全揭秘!
大数据·python
l12586517 小时前
# RAG噪声知识库治理:一致性与可信度的四层防线设计
数据库·人工智能·python·自然语言处理·langchain
zoujiahui_201817 小时前
别再只写 np.random.seed() 了:default_rng 与 np.random、random 到底差在哪?
python
Patrick在香港17 小时前
Claude Agent 进阶:4 种工具调用编排模式,让 0820 那 13 个 endpoint 并行起来
python·ai·ai编程