java - 使用异步加载的 LoadingCache

标签 java caching guava

在guava中,使用LoadingCache时会同步调用CacheLoader。但是,我的 load() 操作可能需要太长时间(~1 秒),我想采取默认操作以防它花费太长时间(>200 毫秒)并异步加载值。

有办法实现吗?或者您是否可以推荐任何其他方法?

最佳答案

Caffeine library是 Guava 缓存的 Java 8 重写,它允许将条目异步自动加载到缓存中,返回 CompletableFutures。它由直接参与创建 Guava 缓存的人员编写,并使用受 Guava 启发的 API(包括 Guava 接口(interface)的适配器)。

根据 Guava 邮件列表上的帖子,它基于 Guava 缓存库的原始提案,并包含最初针对 Guava 本身的更改,但由于各种原因(包括 Guava 需要兼容)而未包含在内使用旧版本的 Java)。

事实上,一些项目现在考虑弃用 Guava 缓存并改用 Caffeine,e.g. Spring has switched to Caffeine并且作者指出“Caffeine 是 ConcurrentLinkedHashMap 和 Guava 缓存的 Java 8 继承者。项目应该更喜欢 Caffeine,并在需要 JDK8 或更高版本时迁移。”

关于java - 使用异步加载的 LoadingCache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17456955/

相关文章:

javascript - 当缓存 Assets 的查询字符串参数更改时,Akamai 是否从源中提取

java - Java 和 .NET 需要分布式缓存

java - 过滤仅具有相交数据的 ArrayList

java - 将日期和时间转换为时间戳格式 java "2019-02-21T14:10:18.161+0000"

java - 如何以编程方式生成 .class 文件?

Java int 到 python int

python - python @cache 装饰器是如何工作的?

caching - 咖啡因与 Guava 缓存

java - 静态初始化程序的合法用途?

java - 使用Java SDK列出AWS S3中的所有对象