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缓存?

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