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方法

猜你喜欢

转载自blog.csdn.net/m0_46580493/article/details/130389246
今日推荐