LRU算法及实现方式
LRUCache(Least-Recently-Used)
替换掉最近最少使用的对象
- 缓存剔除策略,当缓存空间不够用的时候需要一种方式剔除key
- 通过使用一个循环双端队列不断把最新访问的key放到队头实现
- 先进先出,放到队尾则是最后出
实现
利用dict+collections.OrderedDict
- dict作为k/v键值对的缓存
- OrderedDict用来实现最近访问的key
# capacity : 容量 class LRUCache: def __init__(self, capacity=128): self.od = OrderedDict() # 按key的创建时间排序 self.capacity = capacity def get(self, key): # 每次访问更新最新使用的key,move_to_end放到队尾就是最新 if key in self.od: val = self.od[key] self.od.move_to_end(key) return val else: return -1 def put(self, key, value): if key in self.od: del self.od[key] self.od[key] = value # 先删key再赋值就是将key放到队尾,OrderedDict特性,新键在队尾 else: self.od[key] = value # 判断当前容量是否满了 if (len(self.od) > self.capacity): self.od[key].popitem(last=False) # 从队头剔除元素
本文作者:注入灵魂
本文链接:https://www.cnblogs.com/totopian/p/16034411.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步