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)	# 从队头剔除元素
posted @ 2022-03-21 14:04  注入灵魂  阅读(62)  评论(0)    收藏  举报