LRU,FIFO是什么
- LRU(Least Recently Used)是一种缓存淘汰算法,是一种常见的缓存淘汰策略,它的基本思想是“最近最少使用”。
- FIFO(First In First
Out)是一种常见的数据结构,也称为先进先出,它是一种按照元素插入顺序排序的数据结构,元素在数据结构中按照先进先出的顺序进行存储和访问。 - 这两个算法都是为了解决缓存淘汰问题而设计的。在缓存中,最近使用的数据会被优先淘汰,而最近未使用的数据则需要被淘汰以腾出缓存空间。LRU算法通过定期淘汰最近最少使用的数据来保持缓存的最佳状态,而FIFO算法则通过定期移动数据到链表的头部来保持链表的有序性。
在实现缓存时,可以根据实际情况选择使用LRU算法或FIFO算法,以达到最佳的缓存淘汰效果。
LRU,FIFO的源码的执行流程
- LRU(Least RecentlyUsed)是一种缓存淘汰算法,它的基本思想是“最近最少使用”。在缓存中,最近使用的数据会被优先淘汰,而最近未使用的数据则需要被淘汰以腾出缓存空间。为了实现这一功能,LRU算法通过定期淘汰最近最少使用的数据来保持缓存的最佳状态。
- LRU算法的核心思想是使用一个缓存数组,数组中的每个元素都存储了一个键值对。每个键值对表示缓存中的一个数据项,包含数据项的键和值。
当缓存已满时,LRU算法会选择最近最少使用的数据项进行淘汰。具体来说,当缓存已满时,LRU算法会遍历缓存数组,找到最近最少使用的数据项。这个最近最少使用的数据项就是数组中的第一个元素,也就是最久未被使用的数据项。然后,LRU算法会将数组中的第一个元素淘汰,并将该元素的键值对从缓存中删除。这个过程会一直重复,直到缓存中的所有数据项都被淘汰。
LRU算法的执行流程如下:
- 当缓存已满时,LRU算法会遍历缓存数组,找到最近最少使用的数据项。
- 淘汰最近最少使用的数据项,并将该元素的键值对从缓存中删除。
- 重复步骤 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方法