在Caffeine中使用AsyncCache手动加载和删除条目

我只是使用caffeine缓存的初学者,在少数用例中需要澄清。

  1. 我看到caffeine仅支持同步缓存的invalidate / invalidateAll函数。我想知道为什么AsyncCache不支持无​​效功能吗?
TypeError: can only concatenate str (not "list") to str
  1. 还想弄清楚AsyncCache中的put方法是否将条目异步加载到缓存中?我想手动将条目列表添加到AsyncCache中。不确定asyncCache.asMap()。putAll()还是使用asyncCache.put()迭代并添加条目是否会异步进行该工作?

有人可以详细说明吗?

iCMS 回答:在Caffeine中使用AsyncCache手动加载和删除条目

  1. 由于该方法在synchronous()视图中可用,因此它只是进行同一调用的一种方便的默认方法。由于invalidate不返回值,因此在从基础Map中删除了Future之后就不需要阻塞。如果需要清除阻止,可以通过synchronous().asMap().remove(key)获得。它似乎没有承受重量。

  2. AsyncCache存储CompletableFuture作为条目的值。未来的put仅阻塞足够长的时间以执行ConcurrentHashMap操作,从而可以独立解决未来。如果将来由于错误或结果为空而完成,则whenComplete处理程序会将其从缓存中删除。这种建立Map条目的方法是同步的,但是加载Future的值是异步的。

可以将咖啡因视为带有便捷API的有界地图,以解决缓存问题。它应表现为明确使用ConcurrentHashMap时的预期效果。因此,Cache<K,V>〜= Map<K,V>AsyncCache<K,CompletableFuture<V>>。如果缓存api的限制过于严格,则使用asMap视图可提供缓存接口实现类使用的所有功能。

本文链接:https://www.f2er.com/1958721.html

大家都在问