在 Caffeine 中使用 AsyncCache 手动加载和删除条目
Manual load and removal of entries with AsyncCache in Caffeine
我只是 Caffeine 缓存的初学者,需要对一些用例进行说明。
- 我看到 Caffeine 仅支持同步缓存的 invalidate/invalidateAll 功能。我想知道为什么 AsyncCache 不支持 invalidate 函数?
asyncCache.synchronous().invalidate(key) //supported for synchronous cache
asyncCache.invalidate(key)// not supported for async cache
- 还想弄清楚AsyncCache中的put方法是否异步加载缓存入口?我想手动将条目列表添加到 AsyncCache 中。不确定 asyncCache.asMap().putAll() 或使用 asyncCache.put() 迭代和添加条目是否异步完成作业?
有人可以详细说明一下吗?
由于该方法在 synchronous()
视图中可用,因此它只是进行相同调用的便捷默认方法。由于 invalidate
不是 return 值,因此在从基础 Map
中删除未来后,它不需要阻塞。如果需要删除阻塞,可以通过 synchronous().asMap().remove(key)
获得。它似乎没有承载它的重量。
一个 AsyncCache
存储一个 CompletableFuture
作为条目的值。未来的 put
只会阻塞足够长的时间来执行 ConcurrentHashMap
操作,从而允许独立解决未来。如果 future 作为错误或空结果完成,则 whenComplete
处理程序将其从缓存中删除。这种方式建立Map入口是同步的,但是加载future的值是异步的。
Caffeine 可以被认为是一个有界的 Map,带有方便的 API 以解决缓存问题。当显式使用 ConcurrentHashMap
时,它的行为应该与您预期的一样。因此,Cache<K, V>
~= Map<K, V>
和 AsyncCache<K, V>
~= Map<K, CompletableFuture<V>>
。当缓存 api 限制太多时,使用 asMap
视图可提供缓存接口实现 类 使用的所有功能。
我只是 Caffeine 缓存的初学者,需要对一些用例进行说明。
- 我看到 Caffeine 仅支持同步缓存的 invalidate/invalidateAll 功能。我想知道为什么 AsyncCache 不支持 invalidate 函数?
asyncCache.synchronous().invalidate(key) //supported for synchronous cache
asyncCache.invalidate(key)// not supported for async cache
- 还想弄清楚AsyncCache中的put方法是否异步加载缓存入口?我想手动将条目列表添加到 AsyncCache 中。不确定 asyncCache.asMap().putAll() 或使用 asyncCache.put() 迭代和添加条目是否异步完成作业?
有人可以详细说明一下吗?
由于该方法在
synchronous()
视图中可用,因此它只是进行相同调用的便捷默认方法。由于invalidate
不是 return 值,因此在从基础Map
中删除未来后,它不需要阻塞。如果需要删除阻塞,可以通过synchronous().asMap().remove(key)
获得。它似乎没有承载它的重量。一个
AsyncCache
存储一个CompletableFuture
作为条目的值。未来的put
只会阻塞足够长的时间来执行ConcurrentHashMap
操作,从而允许独立解决未来。如果 future 作为错误或空结果完成,则whenComplete
处理程序将其从缓存中删除。这种方式建立Map入口是同步的,但是加载future的值是异步的。
Caffeine 可以被认为是一个有界的 Map,带有方便的 API 以解决缓存问题。当显式使用 ConcurrentHashMap
时,它的行为应该与您预期的一样。因此,Cache<K, V>
~= Map<K, V>
和 AsyncCache<K, V>
~= Map<K, CompletableFuture<V>>
。当缓存 api 限制太多时,使用 asMap
视图可提供缓存接口实现 类 使用的所有功能。