用JS实现一个LRU缓存

Posted 沿着路走到底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用JS实现一个LRU缓存相关的知识,希望对你有一定的参考价值。

LRU缓存

Least Recently Used 最近使用

如果内存有限,只缓存最近使用的,删除 沉水 数据

即淘汰掉最近最少使用的数据,只保留最近经常使用的资源。它是一个固定容量的缓存容器。

核心API:get、set

const lruCache = new LRUCache(2); // 最大缓存长度 2
lruCache.set(1, 1); // 缓存是 1=1
lruCache.set(2, 2); // 缓存是 1=1, 2=2
lruCache.get(1);    // 返回 1
lruCache.set(3, 3); // 该操作会使得关键字 2 作废,缓存是 1=1, 3=3
lruCache.get(2);    // 返回 null
lruCache.set(4, 4); // 该操作会使得关键字 1 作废,缓存是 4=4, 3=3
lruCache.get(1);    // 返回 null
lruCache.get(3);    // 返回 3
lruCache.get(4);    // 返回 4

分析

用哈希表存储数据,这样 get set 才够快 O(1)

必须是有序的,常用数据放在前面,沉水 数据放在后面

哈希表 + 有序,就是 Map

/**
 * @description LRU cache
 */

export default class LRUCache 
    private length: number
    private data: Map<any, any> = new Map()

    constructor(length: number) 
        if (length < 1) throw new Err

以上是关于用JS实现一个LRU缓存的主要内容,如果未能解决你的问题,请参考以下文章

链表(上):如何实现LRU缓存淘汰算法?

146. LRU缓存机制

面试官:手撕LRU缓存了解一下#2021年底大盘点#

看动画理解「链表」实现LRU缓存淘汰算法

LinkedHashMap实现LRU - 附重点源码解析

缓存策略之LRU实现及分析