js:使用Map实现一个LRU缓存

简介: js:使用Map实现一个LRU缓存

LRU:Least Recently Used,最近最少使用

js的Map会保持插入顺序,可以基于Map实现LRU

代码实现

class LRUCache {
  constructor(length) {
    // 容器最大长度
    this.length = length;
    // 数据容器
    this.map = new Map();
  }
  // 设置
  set(key, value) {
    // 容量限制
    if (this.map.size >= this.length) {
      // 等价于:let firstKey = this.map.keys()[0]
      let firstKey = this.map.keys().next().value;
      this.map.delete(firstKey);
    }
    // 存在就删除
    if (this.map.has(key)) {
      this.map.delete(key);
    }
    // 重新加入
    this.map.set(key, value);
  }
  // 获取
  get(key) {
    // 不存在
    if (!this.map.has(key)) {
      return null;
    }
    // 访问过就重新加入
    let value = this.map.get(key);
    this.map.delete(key);
    this.map.set(key, value);
  }
}

测试

let lru = new LRUCache(3);
lru.set("name", "Tom");
lru.set("age", 20);
lru.set("school", "puk");
console.log(lru);
// Map(3) { 'name' => 'Tom', 'age' => 20, 'school' => 'puk' }
lru.set("name", "Tom");
console.log(lru);
// Map(3) { 'age' => 20, 'school' => 'puk', 'name' => 'Tom' }
lru.set("contry", "china");
console.log(lru);
// Map(3) { 'school' => 'puk', 'name' => 'Tom', 'contry' => 'china' }


参考

面试官:请使用JS完成一个LRU缓存?

相关文章
|
3月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
【10月更文挑战第19天】在 Java 中,可以通过设置 HTTP 响应头来确保 JavaScript 文件不被浏览器缓存。方法包括:1. 使用 Servlet 设置响应头,通过 `doGet` 方法设置 `Expires`、`Cache-Control` 和 `Pragma` 头;2. 在 Spring Boot 中配置拦截器,通过 `NoCacheInterceptor` 类和 `WebConfig` 配置类实现相同功能。这两种方法都能确保每次请求都能获取到最新的 JavaScript 内容。
|
3月前
|
缓存 算法 数据挖掘
深入理解缓存更新策略:从LRU到LFU
【10月更文挑战第7天】 在本文中,我们将探讨计算机系统中缓存机制的核心——缓存更新策略。缓存是提高数据检索速度的关键技术之一,无论是在硬件还是软件层面都扮演着重要角色。我们会详细介绍最常用的两种缓存算法:最近最少使用(LRU)和最少使用频率(LFU),并讨论它们的优缺点及适用场景。通过对比分析,旨在帮助读者更好地理解如何选择和实现适合自己需求的缓存策略,从而优化系统性能。
74 3
|
4月前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
209 15
|
3月前
|
缓存 JavaScript CDN
一次js请求一般情况下有哪些地方会有缓存处理?
一次js请求一般情况下有哪些地方会有缓存处理?
47 4
|
3月前
|
缓存 分布式计算 NoSQL
大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念
大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念
88 2
|
4月前
|
存储 JavaScript 前端开发
js的map和set |21
js的map和set |21
|
4月前
|
JavaScript 前端开发
js map和reduce
js map和reduce
|
3月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
大家好,我是 V 哥。本文探讨了 Java 后端确保 JavaScript 不被缓存的问题,分析了文件更新后无法生效、前后端不一致、影响调试与开发及安全问题等场景,并提供了使用版本号、设置 HTTP 响应头、配置静态资源缓存策略和使用 ETag 等解决方案。最后讨论了缓存的合理使用及其平衡方法。
109 0
|
3月前
|
存储 JavaScript 前端开发
js中map属性
js中map属性
27 0
|
4月前
|
JavaScript 前端开发
JavaScript Array map() 方法
JavaScript Array map() 方法