前端 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);
    }
  }
}
相关推荐
sbjdhjd3 小时前
Redis 主从复制、哨兵高可用与 Cluster 集群部署实验手册
运维·前端·redis·云原生·开源·bootstrap·html
乐兮创想 小林3 小时前
企业官网移动端性能优化实战:从 Core Web Vitals 到图片/CDN/响应式的工程清单
前端·性能优化·网站建设·北京网站建设公司
疯狂SQL4 小时前
JWT 在线解码、验签、生成一篇讲透:附前端实现、工具架构与在线体验地址
javascript·jwt·编解码·jwt测试
前端一小卒4 小时前
不手写代码的第 30 天,我才明白前端这个岗位还剩什么
前端·javascript·ai编程
Ajie'Blog4 小时前
Copilot Agent Tasks API 开放:AI 编程开始进入后台任务时代
服务器·前端·javascript·人工智能·copilot·ai编程
Trouvaille ~4 小时前
【Redis篇】Redis 哨兵(Sentinel):高可用自动故障转移
数据库·redis·缓存·中间件·sentinel·高可用·哨兵
老毛肚4 小时前
jeecgboot vue TS & 模板化 04
前端·javascript·vue.js
晓13134 小时前
【Cocos Creator 2.x】篇——第二章 入门
javascript·游戏引擎
AI_零食5 小时前
鸿蒙PC Electron跨平台应用开发:24时区时间表应用详解
前端·华为·electron·开源·harmonyos·鸿蒙
Electrolux6 小时前
[onlyoffice-v9]纯前端怎么实现编辑预览office
前端·javascript·github