gpt4 book ai didi

java - 预加载和刷新缓存条目时的 Guava 线程管理

转载 作者:行者123 更新时间:2023-11-30 05:59:03 26 4
gpt4 key购买 nike

我们希望使用 guava 缓存来缓存第三方数据以获得更好的响应时间。需要通过一系列 api 调用来预加载缓存(将进行约 4000 个 api 调用)。 api 响应包含缓存键及其值。这些 api 调用需要从多个线程(即线程池)并行进行,以加快缓存加载速度。 每个缓存条目都有一个到期时间。这可以使用 expireAfterAccess() 调用来设置。缓存条目过期后,需要在后台自动刷新。另外应该有一种方法(api)可以让我们停止后台缓存刷新,这样我们就不会无休止地进行 api 调用。一旦在配置的时间间隔后停止接收用户请求,我们将调用此 api。

是否可以将缓存加载和刷新的线程管理委托(delegate)给 guava?即给定api调用、将json响应映射到java对象的代码以及缓存键值设计,guava可以自行执行预加载和刷新吗?

谢谢。

最佳答案

Guava 中的自动刷新可以通过 CacheBuilder.refreshAfterWrite() 启用。相关语义描述为:

Specifies that active entries are eligible for automatic refresh once a fixed duration has elapsed after the entry's creation, or the most recent replacement of its value. [ ... ] Currently automatic refreshes are performed when the first stale request for an entry occurs.

当重写方法 CacheLoader.reload() 时,您可以使用线程池异步加载值。

此行为的问题在于,在新值加载(如果成功)之前,您总是会读取一些过时的值。另一种缓存实现,例如 cache2k持续时间过后立即开始刷新。后一种方法会导致更新的数据,但可能会导致更多不必要的读取。请参阅此处最近的一些讨论:https://github.com/ben-manes/caffeine/issues/261

关于java - 预加载和刷新缓存条目时的 Guava 线程管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52587673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com