前端 JS 经典:LRU 缓存算法

前言:什么是 LRU 呢,单词全拼 Least Recently Used,意思是最久未使用 。这个算法是做缓存用的,比如,你要缓存一组数据,你要划分缓存块出来,因为不可能每个数据都做缓存,那么划出来的这个缓存块,就要遵守 LRU 缓存算法。比如你画出来了 4 个缓存块,你已经存了 4 个缓存数据,那么新的数据还要缓存进去,就需要删除之前的一个缓存,那么删除哪个呢,就是最久未使用的那个数据,算法实现如下:定义一个缓存内,用 map 来装键值对。# 代表的私有属性。has 判断是否有缓存数据,get 获取数据后,数据要变成最新使用的数据,要删的时候,不会删它,set存入新数据,然后删除最久未使用的数据。

javascript 复制代码
class LRUCache {
  #map;
  #length;
  constructor(len) {
    this.#map = new Map();
    this.#length = len;
  }

  has(key) {
    return this.#map.has(key);
  }
  get(key) {
    if (this.has(key)) return null;
    const value = this.#map.get(key);
    this.#map.delete(key);
    this.#map.set(key, value);
    return value;
  }
  set(key, value) {
    if (this.has(key)) {
      this.#map.delete(key);
    }
    this.#map.set(key, value);
    if (this.#map.size > this.#length) {
      this.#map.delete(this.#map.keys().next().value);
    }
  }
}
相关推荐
快乐非自愿1 分钟前
Redis--SDS字符串与集合的底层实现原理
数据库·redis·缓存
山楂树の23 分钟前
图像标注大坑:img图片 + Canvas 叠加标注,同步放大后标注位置偏移、对不齐?详解修复方案及亚像素处理原理
前端·css·学习·canva可画
本山德彪25 分钟前
我做了一个拼豆图纸生成器,把照片秒变图纸
前端
DTrader1 小时前
用TS无法实盘量化? - 实盘均线策略
前端·api
进击的夸父1 小时前
vfojs:Vue 超集架构,外壳React灵魂Vue
前端
编程老船长1 小时前
解决不同项目需要不同 Node.js 版本的问题
前端·vue.js
Wect1 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·算法·typescript
漫游的渔夫1 小时前
前端开发者做 Agent:别写成一次请求,用 5 步受控循环防止 AI 乱跑
前端·人工智能·typescript
薛定猫AI2 小时前
【深度解析】Gemma Chat 本地 AI 编程 Agent:Electron + MLX + 开源模型的离线 Vibe Coding 实战
javascript·人工智能·electron
kyriewen2 小时前
Webpack vs Vite:一个是“老黄牛”,一个是“猎豹”,你选谁?
前端·webpack·vite