一、什么是LRU缓存策略
LRU(Least Recently Used)近期最少使用算法。它的原理就是,缓存一定量的数据,当缓存数量超过设置的阈值时就删除一部分旧的数据。
那么我们怎样判定旧数据呢???根据局部性原理,距离当前最久没有被访问过的数据应该被淘汰。
二、LRU缓存策略实现原理
1、使用双向链表记录数据的被使用的时间
因为我们要删除最久没有被访问的数据,为了保证效率,我们在缓存中维护一个双向链表,该链表将缓存中的数据按照访问时间从新到旧排列起来。
当我们需要访问一个数据的时候,如果缓存中已经缓存了这个数据,那么我们就将该数据从缓存的双向链表中摘除,然后再重新放入到双向链表的表头。
如果缓存中没有我们需要的数据,那么我们可以在外部获得数据,然后将数据放入到缓存中,此过程中会将新数据插入到双向链表的表头。
2、使用hash表保证缓存中数据的访问速度
因为链表进行查找是O(n),比较慢。因此为了提高效率,我们除了将数据维护在一个双向链表中,同时还将数据维护在一个hash表中,这时我们访问的效率就变成了O(1)。
3、原理如图:
首先明白,hash表和双向链表用的是同一个结点。双向链表按照访问时间将这些结点串起来,就是图中黑色的箭头。hash表按