咖啡因的构建函数参数的目的?
Purpose of Caffeine's builder function argument?
Caffeine 的新手,我显然缺少一些非常基础的东西。我看到的所有基本用法示例如下所示:
LoadingCache<String,Fizzbuzz> fizzbuzzes = Caffeine.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.DAYS)
.build(k -> fetchFizzbuzzes());
我纠结的是 fetchFizzbuzzes()
函数扮演的角色:
- 是否用于填充初始缓存?
- 如果缓存中不存在密钥,它是否用作某种回退?
- 还有别的吗?
其实这是构建器最重要的部分。传递给 build(CacheLoader)
方法的函数接受一个键并计算该键的值。如果缓存中此键当前没有值,则调用此函数。计算后的值将被添加到缓存中。还有一个不带参数的 build()
方法,如果您想手动检查缓存中存在的元素并手动添加它们,可以使用它。
然而,您的示例没有太多意义,因为 fetchFizzbuzzes()
方法没有参数。也就是说 - 没有副作用 - 它可能 return 所有键的相同值 k
.
看下面的例子:
LoadingCache<String,Fizzbuzz> fizzbuzzes = Caffeine.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.DAYS)
.build(key -> fetchFizzbuzzes(key));
fizzbuzzes.get("myKey"); // will automatically invoke fetchFizzbuzzes with 'myKey' as argument
fizzbuzzes.get("myKey"); // fetchFizzbuzzes won't be called as return value from previous call is added to the cache automatically
Cache<String, Fizzbuzz> fizzbuzzesManual = Caffeine.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.DAYS)
.build();
fizzbuzzesManual.getIfPresent("myKey"); // will return null as no element for 'myKey' was added to the cache before
有关更多详细信息,请参阅 Caffeine wiki。
Caffeine 的新手,我显然缺少一些非常基础的东西。我看到的所有基本用法示例如下所示:
LoadingCache<String,Fizzbuzz> fizzbuzzes = Caffeine.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.DAYS)
.build(k -> fetchFizzbuzzes());
我纠结的是 fetchFizzbuzzes()
函数扮演的角色:
- 是否用于填充初始缓存?
- 如果缓存中不存在密钥,它是否用作某种回退?
- 还有别的吗?
其实这是构建器最重要的部分。传递给 build(CacheLoader)
方法的函数接受一个键并计算该键的值。如果缓存中此键当前没有值,则调用此函数。计算后的值将被添加到缓存中。还有一个不带参数的 build()
方法,如果您想手动检查缓存中存在的元素并手动添加它们,可以使用它。
然而,您的示例没有太多意义,因为 fetchFizzbuzzes()
方法没有参数。也就是说 - 没有副作用 - 它可能 return 所有键的相同值 k
.
看下面的例子:
LoadingCache<String,Fizzbuzz> fizzbuzzes = Caffeine.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.DAYS)
.build(key -> fetchFizzbuzzes(key));
fizzbuzzes.get("myKey"); // will automatically invoke fetchFizzbuzzes with 'myKey' as argument
fizzbuzzes.get("myKey"); // fetchFizzbuzzes won't be called as return value from previous call is added to the cache automatically
Cache<String, Fizzbuzz> fizzbuzzesManual = Caffeine.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.DAYS)
.build();
fizzbuzzesManual.getIfPresent("myKey"); // will return null as no element for 'myKey' was added to the cache before
有关更多详细信息,请参阅 Caffeine wiki。