javascript 的 map 是支持任意类型键的键值对集合,平均时间复杂度 o(1),适合轻量级内存缓存;需手动实现 ttl 过期与清理,不自动过期、不持久化,但结构清晰、操作直观。

JavaScript 中的 Map 是一种键值对集合,支持任意类型作为键,插入、查找、删除平均时间复杂度为 O(1),非常适合实现轻量级内存缓存。它不自动过期、不持久化,但结构清晰、操作直观,是构建简单内存数据库缓存的理想基础。
用 Map 存储结构化数据
把 Map 当作一张内存中的表,键可以是 ID(如字符串或数字),值可以是对象,代表一条记录:
- 用用户 ID 作 key,用户对象作 value,快速查用户
- 键也可以是复合结构,比如
[userId, resourceId]数组(注意:数组作键需谨慎,建议转为字符串如`${userId}:${resourceId}`) - 避免直接用普通对象作键(会被隐式转成
"[object Object]"),优先用原始值或Symbol
封装基本 CRUD 操作
把常用操作封装成方法,模拟数据库行为:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
插入/更新:用
map.set(key, value),重复 key 会覆盖 -
查询单条:用
map.get(key),返回undefined表示不存在 -
删除:用
map.delete(key),返回布尔值表示是否成功 -
批量查询:用
Array.from(map.values())或[...map.values()]获取全部数据;配合filter做条件筛选(注意这不是 SQL,只是内存遍历)
添加简易过期与清理机制
原生 Map 不支持 TTL,但可手动扩展:
- 存储时附带时间戳,例如:
map.set(id, { data: user, expiresAt: Date.now() + 60_000 }) - 读取前检查:
const item = map.get(id); if (item && item.expiresAt > Date.now()) return item.data; - 定期清理(可选):
setTimeout(() => { map.forEach((v, k) => v.expiresAt
注意内存泄漏与适用边界
Map 缓存全在内存中,需主动控制规模:
- 高频写入+无清理 → 内存持续增长,可能 OOM
- 建议搭配 LRU 策略(可用
Map的插入顺序特性 + 手动淘汰最久未用项) - 不适用于需要持久化、分布式、事务或复杂查询的场景;仅适合单实例、读多写少、数据量可控的缓存需求
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










