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 中的轻量级缓存解决方案? 的相关文章

随机推荐

  • 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 开发人员的