在Java中实现简单缓存机制_JavaMap缓存项目说明

Java中用Map实现简单缓存的核心是使用ConcurrentHashMap存储键值对,并添加过期控制(如TTL时间戳校验)和容量限制(如LinkedHashMap+LRU),适用于低并发、非关键业务场景。

Java中用Map实现简单缓存,核心是利用HashMap或ConcurrentHashMap存储键值对,并辅以过期控制、容量限制等策略。它轻量、易理解,适合低并发、非关键业务场景,比如配置项缓存、静态数据临时存储。

基础缓存结构:用ConcurrentHashMap保证线程安全

多线程环境下直接用HashMap会有并发问题,推荐使用ConcurrentHashMap——它天然支持高并发读、安全的写操作,无需额外同步。

  • 声明方式:private final Map cache = new ConcurrentHashMap();
  • CacheEntry可封装value、创建时间、有效期(如long expireAt),便于后续判断是否过期
  • putIfAbsent()、computeIfAbsent()等方法能减少竞态,提升效率

添加过期机制:时间驱动的简易TTL控制

不依赖第三方库时,可通过记录“过期时间戳”实现TTL(Time-To-Live)。每次get前检查是否过期,过期则移除并返回null。

  • 写入时计算过期时间:long expireAt = System.currentTimeMillis() + 5 * 60 * 1000; // 5分钟
  • 读取时校验:if (entry.expireAt
  • 注意:这种被动清理不会自动回收内存,大量过期数据堆积时建议配合定时清理线程(如ScheduledExecutorService)

限制缓存大小:LRU淘汰策略的轻量实现

当内存敏感或需防止无限增长时,可用LinkedHa

shMap按访问顺序维护条目,并重写removeEldestEntry()实现LRU。

  • 构造时启用访问顺序:new LinkedHashMap(16, 0.75f, true)
  • 覆盖方法:protected boolean removeEldestEntry(Map.Entry eldest) { return size() > MAX_SIZE; }
  • 注意:LinkedHashMap不是线程安全的,若需并发支持,应加锁或改用ConcurrentLinkedQueue+手动管理,或选用Caffeine等成熟方案

封装成工具类:提供简洁API

把缓存逻辑封装为GenericCache类,对外暴露put(key, value, ttlSeconds)和get(key)方法,隐藏内部细节,提升复用性与可测性。

  • 构造时指定最大容量和默认TTL,支持运行时动态调整(谨慎使用)
  • get方法内完成过期判断、自动驱逐、返回包装结果(如Optional)
  • 可增加clear()、size()、stats()等辅助方法,方便监控与调试