You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala是否提供内置缓存类?求无依赖LRU内存缓存实现方式

Scala内置LRU内存缓存的现状

Hey there! 直接给你明确答案:Scala标准库并没有自带开箱即用、支持大小限制的LRU缓存实现——你提到的那种无需额外依赖的MemoryCache类,在原生Scala库中是找不到的。

Scala的设计思路更偏向于依托成熟的生态来实现这类功能,比如大家常用的Guava Cache、Caffeine都是非常靠谱的外部缓存库,但如果你的场景就是不想引入任何外部依赖,其实可以借助Java标准库的LinkedHashMap快速实现一个简单的LRU缓存(毕竟Scala和Java是完全兼容的)。

给你写个极简的实现示例:

import java.util.{LinkedHashMap, Map}

// 自定义LRU缓存类,基于LinkedHashMap的访问顺序特性
class LruCache[K, V](maxCapacity: Int) 
  extends LinkedHashMap[K, V](maxCapacity, 0.75f, true) {
  
  // 当缓存大小超过设定的最大容量时,自动移除最久未被访问的条目
  override protected def removeEldestEntry(eldest: Map.Entry[K, V]): Boolean = {
    size() > maxCapacity
  }
}

// 用法示例
object CacheDemo extends App {
  val userCache = new LruCache[String, String](3)
  
  userCache.put("user1", "Alice")
  userCache.put("user2", "Bob")
  userCache.put("user3", "Charlie")
  
  // 访问user1,它会被移到缓存的"最新"位置
  println(userCache.get("user1"))
  
  // 添加第4个条目,此时最久未访问的user2会被自动移除
  userCache.put("user4", "David")
  println(userCache.containsKey("user2")) // 输出false
}

这个实现的核心是LinkedHashMap的accessOrder=true参数,它会让Map按照元素的访问顺序排序;重写removeEldestEntry方法则是告诉Map:当容量超过阈值时,自动删除最老的条目,完美契合LRU的逻辑。

当然啦,如果你的需求更复杂(比如需要过期时间、缓存命中统计、异步加载这些),还是建议用专业的缓存库,毕竟自己写的实现很难覆盖所有边界情况。但如果只是简单的内存LRU缓存需求,上面的代码完全够用,而且不需要任何额外依赖。

内容的提问来源于stack exchange,提问作者Ryan Papke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:01:32