- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想使用这里推荐的 CacheBuilder:
Java time-based map/cache with expiring keys
但是我不明白什么时候 Guava 知道条目会过期。
Guava 是如何做到这一点的,它会产生什么性能成本?
最佳答案
Guava 团队成员在这里。
Guava Cache
实现在正常维护操作过程中使条目过期,这在缓存写入操作期间以每个段为基础发生,偶尔在缓存读取操作期间发生。条目通常不会在恰好它们的过期时间过期,只是因为 Cache
故意决定不创建自己的维护线程,而是让用户决定是否连续需要维护。
我将重点介绍 expireAfterAccess
,但 expireAfterWrite
的过程几乎相同。在机制方面,当你在 CacheBuilder
中指定 expireAfterAccess
时,缓存的每个段都会维护一个链表访问队列,用于条目从最近最少访问开始的顺序到最近的访问。缓存条目实际上本身就是链表中的节点,所以当一个条目被访问时,它会从访问队列中的旧位置移除自己,并将自己移动到队列的末尾。
在执行缓存维护时,缓存所要做的就是使队列前面的每个条目过期,直到找到未过期的条目。这很简单并且需要相对较少的开销,并且它发生在正常的缓存维护过程中。 (此外,缓存特意限制了在单次清理中完成的工作量,从而最大限度地减少任何单次缓存操作的费用。)通常,缓存维护的成本主要由计算缓存中的实际条目的费用决定。
关于java - Guava 如何过期其 CacheBuilder 中的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10144194/
这个问题已经有答案了: Spark 1.5.1, Cassandra Connector 1.5.0-M2, Cassandra 2.1, Scala 2.10, NoSuchMethodError
有人可以向我解释如何正确使用 Guava CacheBuilder。 如果数据不可访问,getFromNetwork() 应该引发异常还是返回 null?我应该引发执行异常并使用 guavaCache
从我的应用程序日志中,我觉得在缓存键过期后没有立即调用removeListener。这会在下面的场景中产生问题 缓存配置: SimpleCacheManager simpleCacheManager
我正在尝试创建一个简单的缓存,可以在其中存储 map 中的一些数据元素。我需要将这些数据保留大约 16 小时左右,之后我可以让旧项目过期。我正在实例化我的 LoadingCache: cache =
嗨,我是谷歌 Guava 集合的新手,所以我需要会过期一段时间的集合。所以我编写了以下代码,但它不会在过期时间后删除数据。任何人都可以告诉我代码的问题是什么。 Cache cache = CacheB
我想弄清楚您在 Guava CacheBuilder maximumSize() 中指定的数字代表什么。 假设我的代码中有这样的东西, Cache programCache = CacheBuilde
我想用 Guava CacheBuilder ,但无法找到任何明确的示例来实现这一点。 文档说明了以下代码: LoadingCache graphs = CacheBuilder.newBuilder
请告诉我哪里遗漏了什么。 我在 DataPool 中有一个由 CacheBuilder 构建的缓存。 DataPool 是一个单例对象,各种线程都可以获取其实例并对其进行操作。现在我有一个线程生成数据
我想要:当实体因超时到期而被移除时收到通知。 我尝试过: 设置删除监听器。 问题: 删除监听器似乎无法正常工作。它仅在我将新项目放入缓存时起作用(请参见下面的代码) 问题: 如何在不放置新项目的情况下
我正在尝试使用 Stash 插件的代码片段,但编译器一直给我一个我似乎无法解决的错误。它使用 com.google.common.cache.Cache (Guava) static final R
我已经创建了一个 Guava(一个包含有用的东西的库,几乎可以在任何 Java 项目中使用,包括用于不可变集合、函数式编程、I/O 等等的库)基于 CacheBuilder 的缓存 LoadingC
我目前在我的应用程序中使用 ConcurrentHashMap,但我需要添加在超时期限后有效地使条目过期的功能 (expireAfterWrite),并在删除条目时通知删除监听器。 我看到 Cache
Guava CacheBuilder 只使用一个 JVM。我想使用 CacheBuilder 接口(interface)从 redis 加载数据,然后 redis 依次从 MySQL 加载数据。 我该
我想使用这里推荐的 CacheBuilder: Java time-based map/cache with expiring keys 但是我不明白什么时候 Guava 知道条目会过期。 Guava
我想知道目前是否有一种方法可以使用 Guava MapMaker 或将使用 CacheBuilder 来提供计算缓存是否在最大大小范围内的函数? 看起来目前的驱逐只是基于缓存中的元素数量与 .maxi
我需要获取慢速方法的结果slowResult()对于类 Something 的实例。单独缓存并没有什么帮助,因为实例几乎不会重复。幸运的是,我知道结果实际上只取决于一些容易获得的Attributes的
我有一个方法可以提取大量数据。由于数据集很大且所需的计算量很大,这可能会花费相当多的时间。执行此调用的方法将被多次使用。结果列表每次都应返回相同的结果。话虽如此,我想缓存结果,所以我只需要做一次计算。
我尝试使用 MapMaker/CacheBuilder 制作缓存,但我不明白如何正确处理空值。 ConcurrentMap graphs = new MapMaker() .concu
从昨天开始尝试上传我的应用程序的新版本(仅更改了客户端代码),出现以下异常(应用程序 ID 为“riparautonline-hrd”): Uncaught exception from servle
我不习惯处理 Java 中的软引用和弱引用,但我理解其中的原理,因为我习惯处理像 Gemfire 这样的数据网格,它在内存已满时提供溢出到硬盘功能,可能使用软引用或我猜是类似的东西。 我在 Guava
我是一名优秀的程序员,十分优秀!