万物不为我所有,但为我所用|

注入灵魂

园龄:3年7个月粉丝:3关注:2

📂面试
🔖python
2022-03-21 14:04阅读: 54评论: 0推荐: 0

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 中国大陆许可协议进行许可。

posted @   注入灵魂  阅读(54)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 尚好的青春 孙燕姿
尚好的青春 - 孙燕姿
00:00 / 00:00
An audio error has occurred.