redis:简单实现LRU算法重写(更新中)

LRU(Least Recently Used):最近最少使用

  • redis列表实现
	from collections import OrderedDict

	class LRUdict(OrderedDict):
	    def __init__(self, cap):
	        self.cap = cap
	        self.items = OrderedDict()
	        
	    def __setitem__(self, key, value):
	        # 当字典执行赋值时 调用当前方法
	        
	        # 方法一
	        old_value = self.items.get(key)
	        # 判断存储的数据是否已经存在
	        if old_value is not None:
	            # 删除指令key
	            self.items.pop(key)
	            self.items[key] = value
	        elif len(self.items) < self.cap:
	            # 正常存储
	            self.items[key] = value
	        else:
	            # 触发淘汰
	            # popitem 可按顺序删除
	            self.items.popitem(last=False)
	            self.items[key] = value
	            
			# 方法二:
			old_value = self.items.get(key)
	        # 判断存储的数据是否已经存在
	        if old_value is not None:
	            # 删除指令key
	        	self.items.pop(key)
		    self.items[key] =  value
		    if len(self.items) > self.cap:
		    	self.items.popitem(last=False)
	
	    def __getitem__(self, item):
	        # 重写字典的取值方法 s = d['a']
	        # 当字典进行取值时 调用当前方法
	        value = self.items.get(item)
	        if value is not None:
	            # 字典中有这个key
	            self.items.pop(item)
	            self.items[item] = value
	        return value
	    
	if __name__=='__main__':
	    d = LRUdict(10)
	    for x in range(15):
	        d[x] = x
	
	    print(d.items)
	    print(d.items.get(10))
  • 有序字典
	class OrderedDict:
		pass
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值