一尘不染

LRU缓存设计

algorithm

最近最少使用(LRU)高速缓存将首先丢弃最近最少使用的项目。如何设计和实现这种高速缓存类?设计要求如下:

1)尽快找到商品

2)一旦缓存未命中且缓存已满,我们需要尽快替换最近最少使用的项目。

如何从设计模式和算法设计上分析和实现这个问题?


阅读 202

收藏
2020-07-28

共1个答案

一尘不染

链表+指向链表节点的指针的哈希表是实现LRU缓存的常用方法。这给出了O(1)操作(假设一个不错的哈希值)。这样做的优势(为O(1)):您只需锁定整个结构即可创建多线程版本。您不必担心粒度锁定等。

简而言之,它的工作方式:

访问值时,将链接列表中的相应节点移到头部。

当您需要从缓存中删除一个值时,可以从尾端删除。

将值添加到缓存时,只需将其放在链接列表的开头即可。

感谢doublep,这是一个具有C ++实现的站点:其他容器模板

2020-07-28