Scala 中的轻量级缓存解决方案?

2024-01-10

我只是想知道 Scala 中是否有可用的缓存解决方案。 我正在寻找类似 Java 中的 Guava 提供的东西。

我应该在 Scala 中使用 Guava 吗? Scalaz 中是否有包装器/皮条客或类似的东西? 还有更适合 Scala 开发人员的替代方案吗?

番石榴提供什么:

LoadingCache<Key, Graph> CACHE= CacheBuilder.newBuilder()
       .maximumSize(1000)
       .expireAfterWrite(10, TimeUnit.MINUTES)
       .removalListener(MY_LISTENER)
       .build(
           new CacheLoader<Key, Graph>() {
             public Graph load(Key key) throws AnyException {
               return createExpensiveGraph(key);
             }
           });

Supplier<Animal> singleAnimalCache = Suppliers.memoizeWithExpiration(animalFromDbSupplier(), 365, TimeUnit.DAYS);

我需要一些基本的缓存管理,就像在 Guava 中一样。


我们有相同的要求,最终围绕 Guava 构建了包装器。我们最近开源了该库的部分内容,称为Mango https://github.com/feijoas/mango。如果你不介意额外的依赖,你可以像这样使用它

import org.feijoas.mango.common.cache._
import org.feijoas.mango.common.base.Suppliers._

val MY_LISTENER = (remNot: RemovalNotification[Key, Graph]) => ()
// > MY_LISTENER : RemovalNotification[Key,Graph] => Unit = <function1>

val CACHE = CacheBuilder.newBuilder()
  .maximumSize(1000)
  .expireAfterWrite(10, TimeUnit.MINUTES)
  .removalListener(MY_LISTENER)
  .build { (key: Key) => new Graph() }
// > CACHE : LoadingCache[Key,Graph] = <function1>

val animalFromDbSupplier = () => {
  // load from db
  new Animal()
}
// > animalFromDbSupplier  : () => Animal = <function0>

val singleAnimalCache = memoizeWithExpiration(animalFromDbSupplier, 365, TimeUnit.DAYS)
// > singleAnimalCache  : () => Animal = Suppliers.memoizeWithExpiration(<function0>, 365, DAYS)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala 中的轻量级缓存解决方案? 的相关文章

  • Source.getLines 中的默认参数错误 (Scala 2.8.0 RC1)

    假设我运行 Scala 2 8 0 RC1 以下 scala 代码应该打印出文件 c hello txt 的内容 for line lt Source fromPath c hello txt getLines println line 但
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • Scala 特性:val/def 和 require

    下面的代码抛出IllegalArgumentException trait T val x Long require x gt 0 object T extends App val y new T val x 42L 而以下情况则不然 tr
  • 在 Scala 中,使用“_”和使用命名标识符有什么区别?

    为什么当我尝试使用时会出现错误 而不是使用命名标识符 scala gt res0 res25 List Int List 1 2 3 4 5 scala gt res0 map gt item toString
  • 如果找不到元素,为什么 Scala 的索引方法返回 -1 而不是 None?

    我一直想知道为什么在 Scala 中使用各种索引方法来确定集合中元素的位置 例如List indexOf List indexWhere 返回 1指示集合中不存在给定元素 而不是更惯用的Option Int 回国有什么特别的好处吗 1代替N
  • 为什么在 Scala 中函数类型需要以单独的参数组传递到函数中

    我是 scala 新手 我用两种方式编写了相同的代码 但我对两种方式有点困惑 在第二种方式中 f 的参数类型是自动派生的 但在 type1 中 scala 编译器无法执行相同的操作 我只是想了解这背后的想法是什么 Type1 给出编译错误
  • Akka 2 中的调度程序有哪些差异和使用模式?

    我很难理解它们的差异和推荐用法Akka 2 中的调度程序 http doc akka io docs akka current scala dispatchers html 我想我明白了平衡调度程序 http doc akka io api
  • Akka Streams / HTTP:从响应中获取原始请求

    我有一个 Akka Streams 源 它会遍历流程并发布 HTTP 请求 source map toRequest via Http outgoingConnection host map toMessage 假设toRequest方法将
  • 在 Scala 中调用 WebSocket 中的方法

    我是 scala Play 框架和 Akka 的新手 我的函数定义为 def socket WebSocket accept String String request gt ActorFlow actorRef out gt MyWebS
  • 按字符分割字符串

    scala 有一个标准的分割字符串的方法StringOps split 但它的行为有点让我惊讶 演示一下 使用快捷便利功能 def sp str String str split toList 以下表达式全部计算结果为 true sp Li
  • 如何使用 Guava 连接字符串?

    我写了一些代码来连接字符串 String inputFile for String inputLine list inputFile inputLine trim 但我不能使用 连接 所以我决定使用 Guava 所以我需要使用Joiner
  • Spark 数据帧:根据另一列的值提取一列

    我有一个包含带有连接价目表的交易的数据框 paid currency EUR USD GBP 49 5 EUR 99 79 69 客户已支付 49 5 欧元 如 货币 列中所示 我现在想将支付的价格与价目表中的价格进行比较 因此 我需要根据
  • 关于 scala.math.Integral 的问题

    有什么方法mkNumericOps andmkOrderingOps of scala math Integral http www scala lang org api current scala math Integral html我们
  • 到底什么是单例类型?

    什么是单例类型 有什么应用和影响 我们非常欢迎示例 更欢迎外行术语 如果将类型视为一组值 则值的单例类型x是仅包含该值的类型 x 用法示例 模式匹配 case Foo type检查匹配的对象是否与Foo using eq where cas
  • META-INF/服务应该在 sbt 中的哪里

    META INF 目录应该放在哪里 以便 sbt 获取自定义配置 我在尝试使用 ServiceLoader 时遇到了这个问题 并且我试图在 META INF services 中创建自定义服务 如果您将 META INF 文件夹放在 src
  • 从 scala 的 Type 获取 ParameterizedType?

    有用的是 scala 的 Universe typeOf 保留了类的类型参数 import scala reflect runtime universe case class X T TypeTag val t typeOf T e g S
  • 根据 Slick 中的 Id 选择单行

    我想根据 Id 查询用户的一行 我有以下虚拟代码 case class User id Option Int name String object Users extends Table User user def id column In
  • 如何将 JSON 转换为 Scala 中的类型

    我的问题是我收到来自 twitter 的 JSON 文本 然后我想将此文本转换为 scala 中的本机对象 有标准方法可以做到这一点吗 我也在用Play 2 这是我所拥有的 import scala io Source fromInputS
  • 使用空/空字段值创建新的数据框

    我正在从现有数据帧创建一个新数据帧 但需要在这个新 DF 中添加新列 下面代码中的 field1 我该怎么做 工作示例代码示例将不胜感激 val edwDf omniDataFrame withColumn field1 callUDF v
  • 如何在 Scala 中将 DataFrame 模式写入文件

    我有一个 DataFrame 它从一个巨大的 json 文件加载并从中获取架构 该架构基本上大约有 1000 列 我希望将 printSchema 的相同输出保存在文件中而不是控制台中 有任何想法吗 如果您在本地环境中工作 您可以执行以下操

随机推荐

  • event.target.value 作为数字?

    const data Setdata useState
  • 如何指定 DjangoForeignKey 字段的默认值?

    我正在尝试添加一个ForeignKey使用 South 将字段转换为 Django 模型 我收到以下错误 ValueError 您无法添加没有默认值的 null False 列 事实上 我确实为该字段指定了默认值 但我不确定我是否做得正确
  • 如何在 Fragment 中实现 Google 地图并使用 GoogleMap 对象?

    如何在Fragment中实现GoogleMap 我正在尝试开发同样的东西 但是 getMap 无法执行 因为 SupportMapFragment 执行行 SupportMapFragment getActivity getSupportF
  • ggplot2 中的密度图和直方图

    我有以下数据框 x1 lt data frame n rnorm 1000000 mean 0 sd 1 nombre x1 x2 lt data frame n rnorm 1500000 mean 3 sd 1 nombre x2 x
  • 带有符号链接的 CMake 文件(安装文件目标目录)

    我正在使用文件 安装文件 但有些文件是符号链接 我可以告诉 CMake 取消引用符号链接而不是在目标上创建符号链接吗 您可以在将文件传递给之前以编程方式取消引用文件install FILES set resolvedFiles foreac
  • 如何在 mailto 的正文中传递 URL

    我需要在正文中发送我的网站的 URL 以便邮件收件人可以单击该 URL 来加入我的网站 然而 目前邮件客户端呈现邮件的方式如下 链接在这里http www example com foo php this a http www exampl
  • Pod UDP 主机端口在 Docker Desktop 中不起作用

    我正在将 Docker Desktop for Windows 与 WSL2 结合使用 并尝试将以下部署部署到我的 Docker Desktop 的 Kubernetes 集群 apiVersion apps v1 kind Deploym
  • Netbeans 8.1 上的 Javascript es6 语法支持

    有谁知道 Netbeans 8 1 是否支持 es6 javascript 语法以及如何启用它 不 它在 8 2 中 NetBeans 8 2 候选版本可在以下位置获取https netbeans org downloads 8 2 rc
  • 软键盘仅在 EditText 焦点上显示一次

    谢谢阅读 我面临一个奇怪的问题 我的应用程序行为是这样的 当Activity开始 我requestFocus on an EditText并显示软键盘 但是 当我按后退按钮关闭键盘并点击EditText我再也没有弹出键盘 唯一的出路就是从头
  • 如何将Scrapy登录cookie传递给Selenium?

    我需要 Selenium 来进行 javascript 工作 首先我使用Scrapy登录FormRequest然后我需要打开response url与硒 问题是 Selenium 没有 cookie 因此它会打开登录页面 有谁知道如何将co
  • 如何在未越狱的iOS设备上直接从浏览器安装tongbu tui应用程序?

    一个人需要做的就是拿起一个普通的 iOS 设备并访问http tui tongbu com m iphone html http tui tongbu com m iphone html然后单击带有苹果徽标的灰色大按钮 然后单击安装 然后将
  • 允许Camel上下文永远运行

    我正在为 springCamelContext 使用camel spring jar 当我启动camel context时 它运行5分钟 默认时间 我可以让我的线程休眠一段特定的时间 即 try camelContext start Thr
  • jQuery Datatables AJAX 请求未正确命中 Web API

    我正在尝试整合ASP NET Web API 2 with jQuery 数据表 1 10 7 我想在我的数据表中使用服务器端处理 所以我使用了 Nuget 包数据表 AspNet WebApi2 这是我的 JavaScript
  • C++ 向外部程序提供输入和输出管道

    我正在尝试使用一些输入调用外部程序 并在程序中检索其输出 它将看起来像 一些输入 外部程序 检索输出 我首先想到使用popen 但这似乎是不可能的 因为管道不是双向的 有没有什么简单的方法可以处理这种事情linux 我可以尝试制作一个临时文
  • Transaction TimeOut EJB 对线程的影响

    关于EJB的一个问题 假设我有一个具有无限循环的会话 bean 它在 EJB 事务下运行 现在 当EJB的事务超时时 是否会导致无限循环线程中断或者容器将停止运行无限循环的线程 现在 当EJB的事务超时时 是否会导致无限循环线程中断或者容器
  • CSS 无法选择其中包含数字的类/id? [复制]

    这个问题在这里已经有答案了 为什么不能在 CSS 中使用数字 还有其他方法可以完成这项工作吗 我有以下代码 div class center 400 width div class Header div div class Content
  • 什么是“XCopy 版本”?

    我正在尝试下载 Oracle 数据访问组件 一些组件被命名为XCopy version 我知道XCopy http en wikipedia org wiki XCOPY是一个命令 但它在这种情况下到底意味着什么 它似乎指的是同一个Xcop
  • R矩阵行选择中的多个条件[重复]

    这个问题在这里已经有答案了 可能的重复 我有一个简单的问题 但我不知道如何解决这个问题 我想选择 value 1 gt 0 和 value 2 gt 0 的所有行 现在我有这个代码 dataOnBoth lt data data value
  • 如何在Android中实现“发送反馈”功能? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions I would like this
  • Scala 中的轻量级缓存解决方案?

    我只是想知道 Scala 中是否有可用的缓存解决方案 我正在寻找类似 Java 中的 Guava 提供的东西 我应该在 Scala 中使用 Guava 吗 Scalaz 中是否有包装器 皮条客或类似的东西 还有更适合 Scala 开发人员的