LRU,FIFO

LRU,FIFO是什么

  1. LRU(Least Recently Used)是一种缓存淘汰算法,是一种常见的缓存淘汰策略,它的基本思想是“最近最少使用”。
  2. FIFO(First In First
    Out)是一种常见的数据结构,也称为先进先出,它是一种按照元素插入顺序排序的数据结构,元素在数据结构中按照先进先出的顺序进行存储和访问。
  3. 这两个算法都是为了解决缓存淘汰问题而设计的。在缓存中,最近使用的数据会被优先淘汰,而最近未使用的数据则需要被淘汰以腾出缓存空间。LRU算法通过定期淘汰最近最少使用的数据来保持缓存的最佳状态,而FIFO算法则通过定期移动数据到链表的头部来保持链表的有序性。

在实现缓存时,可以根据实际情况选择使用LRU算法或FIFO算法,以达到最佳的缓存淘汰效果。

LRU,FIFO的源码的执行流程

  1. LRU(Least RecentlyUsed)是一种缓存淘汰算法,它的基本思想是“最近最少使用”。在缓存中,最近使用的数据会被优先淘汰,而最近未使用的数据则需要被淘汰以腾出缓存空间。为了实现这一功能,LRU算法通过定期淘汰最近最少使用的数据来保持缓存的最佳状态。
  2. LRU算法的核心思想是使用一个缓存数组,数组中的每个元素都存储了一个键值对。每个键值对表示缓存中的一个数据项,包含数据项的键和值。

当缓存已满时,LRU算法会选择最近最少使用的数据项进行淘汰。具体来说,当缓存已满时,LRU算法会遍历缓存数组,找到最近最少使用的数据项。这个最近最少使用的数据项就是数组中的第一个元素,也就是最久未被使用的数据项。然后,LRU算法会将数组中的第一个元素淘汰,并将该元素的键值对从缓存中删除。这个过程会一直重复,直到缓存中的所有数据项都被淘汰。

LRU算法的执行流程如下:

  1. 当缓存已满时,LRU算法会遍历缓存数组,找到最近最少使用的数据项。
  2. 淘汰最近最少使用的数据项,并将该元素的键值对从缓存中删除。
  3. 重复步骤 1 和步骤 2,直到缓存中的所有数据项都被淘汰。

LRU算法的时间复杂度为O(1),因为它只需要遍历一次缓存数组。在理想情况下,LRU算法可以在O(1)的时间内完成所有操作,并且可以保证缓存的最佳状态。

下面是一个简单的LRU算法的实现,使用Python语言实现:

class LRUCache:  
    def __init__(self, capacity):  
        self.capacity = capacity  
        self.cache = []  
  
    def get(self, key):  
        for i, (k, v) in enumerate(self.cache):  
            if k == key:  
                self.cache.append((i, (key, v)))  
                return v  
        return -1  
  
    def put(self, key, value):  
        for i, (k, v) in enumerate(self.cache):  
            if k == key:  
                self.cache.append((i, (key, v)))  
                return False  
        self.cache.append((0, (key, value)))  
        return True  
  
cache = LRUCache(2)  
cache.put(1, 1)  
cache.put(2, 2)  
print(cache.get(1))  # 返回 1  
cache.put(3, 3)  
print(cache.get(2))  # 返回 -1,因为缓存已满,最近最少使用的数据项是 2  
print(cache.get(3))  # 返回 3,因为缓存已满,最近最少使用的数据项是 3

在这个实现中,LRUCache类是一个简单的缓存实现,包含了get和put两个方法。在get方法中,如果找到了键值对,就将其添加到缓存中,并返回对应的值。如果找不到,就返回-1。在put方法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值