实际上,这是构建器中最重要的部分。传递给该build(CacheLoader)
方法的函数接受一个键并计算该键的值。如果缓存中当前没有此键的值,则调用此函数。计算后的值将被添加到缓存中。还有build()
一种不带参数的方法,如果您想手动检查缓存中是否存在元素并手动添加它们,可以使用该方法。
但是,您的示例没有太大意义,因为该fetchFizzbuzzes()
方法没有参数。也就是说——没有副作用——它可能会为所有键返回相同的值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
有关更多详细信息,请参阅咖啡因 wiki。