java - 如何让丢失的条目在 Guava 中更快地过期

标签 java caching guava

我有一个 Java 服务,它通过数据库查找将 String 键转换为 Long id。我将它包装在 Guava 缓存中以减少数据库查询。从键到 id 的映射一旦设置就不会改变,因此我可以对现有键使用较长的过期时间。但是存在时间问题(不是在 Guava 中,而是在我的应用程序中),有人可能会在 key 进入数据库之前查找 key 的 ID。我不想长时间缓存这个“丢失”的映射。不过,我确实想缓存它,以避免对相同丢失的键的大量查询。

我读了这个问题:Handle null value ... ,然后我从那里拼凑了一个带有 2 个缓存的解决方案。我有一个“丢失的 key ”缓存,我让它过期得更快而且它没有自动加载功能。我首先检查这个缓存,如果我在那里找到什么东西,我就知道它丢失了 key 。否则,我会尝试“真正的”缓存,捕获一个 ExecutionException 以指示“丢失”,然后手动填充“丢失的键”缓存。感觉挺别扭的,尤其是在没有映射的情况下我在load方法中抛出异常的部分。所以我想知道是否有更优雅的方式来处理这类问题。

最佳答案

您可能会尝试基于 refresh 的方法,您可以在其中实现 CacheLoader.reload(key, oldValue) 来主动刷新“丢失”的映射,而您只需保留 oldValue 如果 oldValue 不是“缺失”。

关于java - 如何让丢失的条目在 Guava 中更快地过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16070641/

相关文章:

java - 由于开放 JDK 中的版本字符串,Maven 执行器插件崩溃

java - 每个端点 URI 的 ProducerTemplate?

java - 使用 IText 在 PDF 中嵌入非嵌入字体

java - 具有条目驱逐的并发阻塞映射

java - 从 Set 中移除 "first"对象

java - 使用 Google Guava 的 Objects.ToStringHelper

java - Google App Engine Warfile 目录结构

rest - 位置请求的缓存策略

http - 防止 Tomcat 中的 304 NOT MODIFIED 响应

python - django 缓存 session