什么是LRUCache 和 LRUCache 实现

1.什么是LRUCache ?

    Least-Recently-Used 替换掉最近最少使用的对象(如 redis缓存策略)

缓存剔除策略,当缓存空间不够用的时候需要一种方法剔除key

常用的有 LRU(从使用的时间下手把时间长剔除掉) , LFU(从使用次数下手把次数最少剔除掉)等

LRU通过使用一个循环双端队列不断把最新访问的 Key 放到表头,就是把最新访问的放到最前(右边),把最远的访问保持在尾部(左边),把最远访问的key剔除就可以了

什么是LRUCache 和 LRUCache 实现_第1张图片

2.如何实现 LRUCache ?

   字典用来缓存,循环双端链表用来记录访问顺序

利用Python 内置库 dict +collections.OderedDict(它可以记录key访问顺序) 实现

dict 用来当做 k/v 键值对的缓存

OderedDict 用来实现更新最近访问的 key

代码示例:

from collections import OrderedDict


class LRUCache():
	
	def __init__(self, capacity=128): 
		# 参数capacity表示容量,允许128个key/value存在
		self.od = OrderedDict() 
		self.capacity = capacity  
	
	def get(self, key): # 每次访问更新最新使用的 key
		if key in self.od: 
			val = self.od[key]  # 取出key对应value值
			# 把key放到最尾部,就是最近访问的放到最右边
			self.od.move_to_end(key) 
			return val
		else:
			return -1
	
	def put(self, key, value): # 更新key/value的值
		if key in self.od:
			del self.od[key] # 删除
			self.od[key] = value  # 从新赋值
		else: # insert
			self.od[key] = value
			# 判断当前容量是否已经满了
			if len(self.od) > self.capacity:
				self.od.popitem(last=False) # 把最早的key删除

你可能感兴趣的:(Python语言)