java - 谷歌番石榴缓存 invalidateAll() 和 cleanUp() 之间的区别

2023-12-09

说我有一个Cache定义如下:

private static Cache<String, Long> alertsUIDCache = CacheBuilder.newBuilder().
           expireAfterAccess(60).build();

从我读到的(如果我错了请纠正):

如果值写入Cache0:00,60 秒后应转至“准备驱逐”状态。实际从中删除该值Cache将发生在下一个缓存修改(到底什么是缓存修改?)。是对的吗?

另外,我不确定两者之间有什么区别invalidateAll()cleanUp()方法,有人可以解释一下吗?


第一部分从这个链接:Guava 如何使 CacheBuilder 中的条目过期?

我将重点关注访问后过期,但 expireAfterWrite 的过程几乎相同。就机制而言,当您指定访问后过期在CacheBuilder中,缓存的每个段都按照从最近最少访问到最近访问的顺序维护一个链表访问队列。缓存条目实际上是链表中的节点,因此当访问条目时,它会将自己从访问队列中的旧位置删除,并将自己移动到队列的末尾。

第二部分: 从这个链接:Guava CacheLoader - 如果同时设置了 expireAfterWrite 和 expireAfterAccess,invalidate 不会立即使条目无效

invalidate应该立即删除该条目——而不是等待另一个查询——并且应该强制该值在该键的下一个查询时重新加载。

cleanUp:执行缓存所需的任何挂起的维护操作。到底执行哪些活动(如果有的话)取决于实现。

from 番石榴文件: https://github.com/google/guava/wiki/CachesExplained

显式删除

您可以随时显式地使缓存条目无效,而不是等待条目被逐出。可以这样做:

individually, using Cache.invalidate(key)
in bulk, using Cache.invalidateAll(keys)
to all entries, using Cache.invalidateAll()

何时进行清理?

使用 CacheBuilder 构建的缓存不会“自动”执行清理和逐出值,也不会在值过期后立即执行清理和逐出值,或者执行类似操作。相反,它会在写入操作期间执行少量维护,或者如果写入很少,则在偶尔的读取操作期间执行少量维护。

原因是这样的:如果我们想要持续进行Cache维护,就需要创建一个线程,并且它的操作会与用户操作竞争共享锁。此外,某些环境限制线程的创建,这将使 CacheBuilder 在该环境中无法使用。

相反,我们将选择权交给您。如果您的缓存是高吞吐量的,那么您不必担心执行缓存维护来清理过期条目等。如果您的缓存很少写入,并且您不希望清理阻止缓存读取,您可能希望创建自己的维护线程,定期调用 Cache.cleanUp()。

如果您想为很少有写入的缓存安排定期缓存维护,只需使用 ScheduledExecutorService 安排维护即可。

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

java - 谷歌番石榴缓存 invalidateAll() 和 cleanUp() 之间的区别 的相关文章

随机推荐

  • 如何在保留所有箭头的同时消除 TreeView 中的线条

    我有一个 TreeView 我正在使用它来剥皮SetWindowsTheme pinvoke 但是我无法删除出现的树线 我不想画 主人 因为我相信这相当于用一辆 18 轮卡车来运送一份炸玉米饼 杀伤力太大 有什么干净 快速的方法可以消除树叉
  • java中的视频转换[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 Java 是否有任何框架或开源项目可以将视频从任何视频格式转换为任何视频格式 类似的东西Panda视频转换框架 你指的是JMF吗 Java媒体框架
  • 如何在弹出框内显示键盘?,ipad 密码锁定样式

    是否可以按照为 ipad 设置密码时显示的方式显示键盘 不幸的是没有 但我所做的复制是 使用界面生成器在我的密码视图中构建了一堆按钮 例如键盘 然后将每个按钮链接到一个可以更改文本字段的命令 IBAction button9 clicked
  • 如何在画布上填充图案并沿着形状弯曲?

    I have one image like this and I want to fill with pattern like this to make result like this I can fill the pattern usi
  • 如何解决 rstudio 中的“plot.new() 错误:图形边距太大”?

    我已阅读与此问题相关的所有帖子 但事实是 如果您有很多变量要绘制 则此问题仍然会发生 我的笔记本电脑分辨率是 1080p 我打开 rstudio 并运行以下脚本 a lt iris 1 4 gt a lt t a gt a lt as da
  • 正则表达式忽略重复匹配

    我有这样的字符串 var str When Home is on fire go and dance in fire 我想检查我的字符串是否有单词home and fire 为此 我使用了这个正则表达式 var words str matc
  • 托管到 iis 时无法访问打印机

    我在 MVC 中使用 rdlc 报告 在 Visual Studio 中运行时打印操作工作正常 但是当发布到同一台机器中设置的 iis 时 打印操作没有发生 但是当我将报告作为 pdf 返回时 报告会显示在那里 我可以使用 javascri
  • EaselJS onclick 接管整个画布

    我正在使用 canvas 和 EaselJS 构建游戏 但是在 onclick 内执行任何删除窗口焦点的操作时会出现问题 即 提示 警报 窗口打开 据我所知 它发生在 FireFox 和一些移动 Android 设备上 我想我明白为什么会这
  • Git rebase:没有跟踪信息

    我在用git version 2 9 0 windows 1我想重新设置本地存储库 非远程 但我总是得到 当前分支没有跟踪信息 请指定您要针对哪个分支进行变基 有关详细信息 请参阅 git rebase 1 git 变基 如果您想为此分支设
  • 无法使用图像和名称正确填充 ListPicker 控件

    我已经为用户创建了一个 ListPicker 控件来更改他或她的背景 但并非所有信息都正确填充在 ListPicker 控件中 当用户导航到我的 SettingsPage 时 会出现问题 所有 ListPicker 项目的文本都正确显示 但
  • Android - 使用 LocationManager 不会提供地理修复

    我正在尝试使用以下代码获取 G1 的 GPS 位置 活动中 MyLocationListener myListener new MyLocationListener LocationManager myManager LocationMan
  • 更改 app.config 后强制重新生成 Settings.settings 文件

    我有一个自动构建过程 可以将应用程序设置为指定模式 例如 Dev uat live 根据这种模式 我想将连接字符串更新为相关的连接字符串 但是 在我的数据访问层中有一个 app config 文件 它存储连接字符串 用于提供 Setting
  • 使用 JSOUP 将文档加载到 WebView

    我正在尝试将网页的一部分解析为 WebView 我正在使用 jsoup 库获取我需要的部分页面 然后加载到 webview 这是代码 public void loadArticleWithHTML Thread downloadThread
  • 随机创建两个列表

    我使用 pandas 从 CSV 文件导入大量数据 读取后我将其格式化为仅包含数字数据 然后返回列表中的列表 每个列表包含大约 140k 位数据 numericalData 从这个列表中 我希望创建Testing and Training
  • iPhone - 可以覆盖 UITableViewCell setSelected:animated

    我正在绘制自定义 UITableViewCells 我的单元格是不透明的 并且完全绘制在单元格的 drawRect 中 以帮助提高性能 我想自己处理选定单元格的外观 如果不这样做 那么我的单元格的内容将被添加的 selectedBackgr
  • 找不到 javax.servlet.jsp.jstl.core.Config 类

    我正在尝试将 Spring 与 Hibernate 一起使用 视图使用 JSTL 当我在浏览器中打开页面时 我看到错误 java lang ClassNotFoundException javax servlet jsp jstl core
  • 为什么我应该将 XPathContext 与 Perl 的 XML::LibXML 一起使用?

    该脚本可以在有或没有的情况下使用XPathContext 我为什么要使用它XPathContext usr bin env perl use warnings use strict use XML LibXML use 5 012 my p
  • 在登录屏幕中禁用stormpath的创建帐户选项

    我想在stormpath登录屏幕中禁用创建帐户 对 api 的调用应该已经由经过应用程序身份验证的用户进行 我尝试将stormpathEnableRegistration 设置为 false 但注册功能仍然启用 app use stormp
  • 如何调用一个哈希值的方法?

    之前 我询问过一种在给定条件下执行方法的巧妙方法 Ruby 是一种根据条件执行函数的巧妙方法 解决方案和响应时间都很棒 但在实施后 拥有 lambda 哈希值很快就会变得丑陋 所以我开始尝试 以下代码有效 def a puts hello
  • java - 谷歌番石榴缓存 invalidateAll() 和 cleanUp() 之间的区别

    说我有一个Cache定义如下 private static Cache