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() 之间的区别 的相关文章

  • 在 JTable 中使用自定义 TablecellRenderer

    我是 Java 新手 我创建了一个JTable 就是这样addRow当我尝试向表中添加一行时 该方法有效 private void addTableRow String type String name String rank String
  • JDT - 尝试更改类型的超类。我不知道超级类的限定名称

    我有一个程序 除其他任务外 还必须使用 JDT 更改某些类的超类 我有两个字符串 其中包含要交换的超类的限定名称 例如 org example John 和 org example Smith 并且我正在解析整个 AST 搜索扩展这些类的类
  • 如何在 Java 中验证从 Azure AD B2C 生成的 JWT 令牌?

    我正在寻找 Java 代码示例来验证 Azure AD B2C 令牌 我们可以使用哪些依赖项 所有 JWT 令牌的 JWT 令牌验证步骤或代码是否相同还是会有所不同 我们的项目中没有使用 Spring Security 有大量的图书馆her
  • 如何修复安装 maven jar 插件依赖项时出现的错误?

    我正在将应用程序制作成 maven 中的 jar 文件 但是 当我从 Maven 中提取 jar 插件存储库并在终端中运行这三个命令时 mvn clean mvn compile mvn package 在 mvn package 中 我收
  • 方法重载。你能过度使用它吗?

    当定义多个使用不同过滤器返回相同形状的数据的方法时 什么是更好的做法 显式方法名称或重载方法 例如 如果我有一些产品并且我正在从数据库中提取 显式方式 public List
  • android.os.FileUriExposedException 在 Oreo 中引起(仅!)[重复]

    这个问题在这里已经有答案了 从 Google Play Console 中 我可以看到此异常仅发生在 Android 8 0 的设备上 android os FileUriExposedException at android os Str
  • 从 java 类生成 xsd 的实用程序

    我想为以下类生成 xsd public class Node private String value private List
  • LibGDX 闪烁

    我已经使用 LibGDX UI 设置来启动一个项目 我在实现 ApplicationListener 中唯一拥有的是 public void create setScreen new LoadingScreen this 这应该会触发 Lo
  • [TYPE] 类型的 Bean 'x' 不符合所有 BeanPostProcessors 的处理条件

    我有一个ResourceAspect class Component Aspect public class ResourceAspect Before execution public public void resourceAccess
  • Logback 配置在单行上有异常吗?

    我的日志被提取 传输并合并到 elasticsearch 中 多行事件很难跟踪和诊断 有没有办法使用收集器和正则表达式将异常行分组到单个记录中登录配置 https logback qos ch manual layouts html xTh
  • Poi:从 xlsm 打开 Excel 文件后将其保存为 xlsx

    我正在编写一个java程序 它打开一个用户定义的excel文件 用数据填充它 然后将其保存在用户指定的路径 文件名和扩展名下 即使输入文件是 xlsm 也应该可以声明输出保存为 xlsx 但实际上是不可能的 如果我尝试使用下面的代码 打开文
  • 使用 JavaFX 将可执行 Jar 限制为一个窗口

    我正在通过构建 JavaFX 应用程序E fx 剪辑 and Java场景生成器 基本功能是登录窗口 登录后 将打开新窗口 然后登录窗口消失 目前还处于原型阶段 用完eclipse后 我想要的功能都有了 启动时显示登录窗口 代码如下 Ove
  • 检查对象是否为空

    我有一个链表 其中第一个节点包含空对象 表示firstNode data等于null firstNode nextPointer null firstNode previousPointer null 我想检查firstNode 是否为空
  • 什么会导致“IO错误java.net.SocketException:选择失败”?

    我的笔记本电脑上运行一个服务器程序 相同的路由器和相同的代码 它工作正常 客户端可以连接 然而 当我将工作区复制到我的电脑并运行它时 我得到了这样的废话 IO错误java net SocketException 选择失败 这是代码 publ
  • 使用 Jboss7 加载资源返回 null

    如何使用Jboss7 1从java代码中加载图像等资源 这曾经与 Jboss4 一起使用 this getClass getClassLoader getResourceAsStream myapp includes images imag
  • 如何保存/加载 BigInteger 数组

    我想保存 加载BigInteger数组传入 传出 SharedPreferences 如何做呢 例如对于以下数组 private BigInteger dataCreatedTimes new BigInteger 20 Using Gso
  • 抛出 UnsupportedOperationException

    因此其中一种方法的描述如下 public BasicLinkedList addToFront T data 该操作无效 对于排序列表 将生成 UnsupportedOperationException 使用消息 排序列表的操作无效 我的代
  • 我的代码线程不安全吗?

    我编写了代码来理解 CyclicBarrier 我的应用程序模拟选举 每轮选出得票少的候选人 该候选人从竞争中淘汰以获得胜利 source class ElectoralCommission public volatile boolean
  • 如何在 VSCode 中热重载 Tomcat 服务器

    我正在从 Eclipse IDE VSCode 分别用于编码 Java servlet 和 HTML CSS JS 网页 迁移到仅使用 Visual Studio Code 因为它的轻量级 我为 VSCode 安装了几个 Java 扩展 R
  • 最新版本 6.* Struts2 支持 Tomcat 10 吗? [复制]

    这个问题在这里已经有答案了 最新版本 6 Struts2 支持 Tomcat 10 吗 异常启动过滤器 struts2 java lang ClassCastException class org apache struts2 dispat

随机推荐

  • 如何在保留所有箭头的同时消除 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