Guava 加载多个键并获取多个项目

use*_*766 3 java guava

我想使用 Guava 作为缓存,但我似乎找不到 Guava 具有允许我加载多个项目并获取多个项目的能力。

我看到 CacheLoader 有以下内容:

    @Override
    public Value load(String key) {
        return getKey();
    }
Run Code Online (Sandbox Code Playgroud)

我需要加载的是:

    @Override
    public List<Value> load(List<String> keys) {
        return getKeys();
    }
Run Code Online (Sandbox Code Playgroud)

我还希望从缓存中获取一个或一组项目,但即使我必须将一个项目包装到列表中才能获取它,我也很高兴。

我是 Guava 的新手,不确定 Guava 是否有这样的功能?

shm*_*sel 6

您可以使用CacheLoader.loadAll()来加载多个项目并LoadingCache.getAll()获取它们。

例如:

new CacheLoader<String, Value>() {
    @Override
    public Value load(String key) {
        return getKey();
    }

    @Override
    public Map<String, Value> load(Iterable<? extends String> keys) {
        return getKeys();
    }
}
//...
List<String> keys = Arrays.asList("key1", "key2", "key3");
ImmutableMap<String, Value> values = cache.getAll(keys);
Run Code Online (Sandbox Code Playgroud)