Interface CacheLoader<K,V>
-
- All Superinterfaces:
AsyncCacheLoader<K,V>
- Functional Interface:
- This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
@FunctionalInterface public interface CacheLoader<K,V> extends AsyncCacheLoader<K,V>
Computes or retrieves values, based on a key, for use in populating aLoadingCache
orAsyncLoadingCache
.Most implementations will only need to implement
load(K)
. Other methods may be overridden as desired.Usage example:
CacheLoader<Key, Graph> loader = key -> createExpensiveGraph(key); LoadingCache<Key, Graph> cache = Caffeine.newBuilder().build(loader);
-
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description default CompletableFuture<? extends V>
asyncLoad(K key, Executor executor)
Asynchronously computes or retrieves the value corresponding tokey
.default CompletableFuture<? extends Map<? extends K,? extends V>>
asyncLoadAll(Set<? extends K> keys, Executor executor)
Asynchronously computes or retrieves the values corresponding tokeys
.default CompletableFuture<? extends V>
asyncReload(K key, V oldValue, Executor executor)
Asynchronously computes or retrieves a replacement value corresponding to an already-cachedkey
.static <K,V>
CacheLoader<K,V>bulk(Function<? super Set<? extends K>,? extends Map<? extends K,? extends V>> mappingFunction)
Returns a cache loader that delegates to the supplied mapping function for retrieving the values.@Nullable V
load(K key)
Computes or retrieves the value corresponding tokey
.default Map<? extends K,? extends V>
loadAll(Set<? extends K> keys)
Computes or retrieves the values corresponding tokeys
.default @Nullable V
reload(K key, V oldValue)
Computes or retrieves a replacement value corresponding to an already-cachedkey
.
-
-
-
Method Detail
-
load
@Nullable V load(K key) throws Exception
Computes or retrieves the value corresponding tokey
.Warning: loading must not attempt to update any mappings of this cache directly.
- Parameters:
key
- the non-null key whose value should be loaded- Returns:
- the value associated with
key
ornull
if not found - Throws:
Exception
- or Error, in which case the mapping is unchangedInterruptedException
- if this method is interrupted.InterruptedException
is treated like any otherException
in all respects except that, when it is caught, the thread's interrupt status is set
-
loadAll
default Map<? extends K,? extends V> loadAll(Set<? extends K> keys) throws Exception
Computes or retrieves the values corresponding tokeys
. This method is called byLoadingCache.getAll(java.lang.Iterable<? extends K>)
.If the returned map doesn't contain all requested
keys
then the entries it does contain will be cached andgetAll
will return the partial results. If the returned map contains extra keys not present inkeys
then all returned entries will be cached, but only the entries forkeys
will be returned fromgetAll
.This method should be overridden when bulk retrieval is significantly more efficient than many individual lookups. Note that
LoadingCache.getAll(java.lang.Iterable<? extends K>)
will defer to individual calls toLoadingCache.get(K)
if this method is not overridden.Warning: loading must not attempt to update any mappings of this cache directly.
- Parameters:
keys
- the unique, non-null keys whose values should be loaded- Returns:
- a map from each key in
keys
to the value associated with that key; may not contain null values - Throws:
Exception
- or Error, in which case the mappings are unchangedInterruptedException
- if this method is interrupted.InterruptedException
is treated like any otherException
in all respects except that, when it is caught, the thread's interrupt status is set
-
asyncLoad
default CompletableFuture<? extends V> asyncLoad(K key, Executor executor)
Asynchronously computes or retrieves the value corresponding tokey
.- Specified by:
asyncLoad
in interfaceAsyncCacheLoader<K,V>
- Parameters:
key
- the non-null key whose value should be loadedexecutor
- the executor that asynchronously loads the entry- Returns:
- the future value associated with
key
-
asyncLoadAll
default CompletableFuture<? extends Map<? extends K,? extends V>> asyncLoadAll(Set<? extends K> keys, Executor executor)
Asynchronously computes or retrieves the values corresponding tokeys
. This method is called byAsyncLoadingCache.getAll(java.lang.Iterable<? extends K>)
.If the returned map doesn't contain all requested
keys
then the entries it does contain will be cached andgetAll
will return the partial results. If the returned map contains extra keys not present inkeys
then all returned entries will be cached, but only the entries forkeys
will be returned fromgetAll
.This method should be overridden when bulk retrieval is significantly more efficient than many individual lookups. Note that
AsyncLoadingCache.getAll(java.lang.Iterable<? extends K>)
will defer to individual calls toAsyncLoadingCache.get(K)
if this method is not overridden.Warning: loading must not attempt to update any mappings of this cache directly.
- Specified by:
asyncLoadAll
in interfaceAsyncCacheLoader<K,V>
- Parameters:
keys
- the unique, non-null keys whose values should be loadedexecutor
- the executor that with asynchronously loads the entries- Returns:
- a future containing the map from each key in
keys
to the value associated with that key; may not contain null values
-
reload
default @Nullable V reload(K key, V oldValue) throws Exception
Computes or retrieves a replacement value corresponding to an already-cachedkey
. If the replacement value is not found then the mapping will be removed ifnull
is returned. This method is called when an existing cache entry is refreshed byCaffeine.refreshAfterWrite(java.time.Duration)
, or through a call toLoadingCache.refresh(K)
.Warning: loading must not attempt to update any mappings of this cache directly or block waiting for other cache operations to complete.
Note: all exceptions thrown by this method will be logged and then swallowed.
- Parameters:
key
- the non-null key whose value should be loadedoldValue
- the non-null old value corresponding tokey
- Returns:
- the new value associated with
key
, ornull
if the mapping is to be removed - Throws:
Exception
- or Error, in which case the mapping is unchangedInterruptedException
- if this method is interrupted.InterruptedException
is treated like any otherException
in all respects except that, when it is caught, the thread's interrupt status is set
-
asyncReload
default CompletableFuture<? extends V> asyncReload(K key, V oldValue, Executor executor) throws Exception
Asynchronously computes or retrieves a replacement value corresponding to an already-cachedkey
. If the replacement value is not found then the mapping will be removed ifnull
is computed. This method is called when an existing cache entry is refreshed byCaffeine.refreshAfterWrite(java.time.Duration)
, or through a call toLoadingCache.refresh(K)
.Warning: loading must not attempt to update any mappings of this cache directly or block waiting for other cache operations to complete.
Note: all exceptions thrown by this method will be logged and then swallowed.
- Specified by:
asyncReload
in interfaceAsyncCacheLoader<K,V>
- Parameters:
key
- the non-null key whose value should be loadedoldValue
- the non-null old value corresponding tokey
executor
- the executor with which the entry is asynchronously loaded- Returns:
- a future containing the new value associated with
key
, or containingnull
if the mapping is to be removed - Throws:
Exception
- or Error, in which case the mapping is unchangedInterruptedException
- if this method is interrupted.InterruptedException
is treated like any otherException
in all respects except that, when it is caught, the thread's interrupt status is set
-
bulk
@CheckReturnValue static <K,V> CacheLoader<K,V> bulk(Function<? super Set<? extends K>,? extends Map<? extends K,? extends V>> mappingFunction)
Returns a cache loader that delegates to the supplied mapping function for retrieving the values. Note thatload(K)
will silently discard any additional mappings loaded when retrieving thekey
prior to returning to the value to the cache.Usage example:
CacheLoader<Key, Graph> loader = CacheLoader.bulk(keys -> createExpensiveGraphs(keys)); LoadingCache<Key, Graph> cache = Caffeine.newBuilder().build(loader);
- Type Parameters:
K
- the key typeV
- the value type- Parameters:
mappingFunction
- the function to compute the values- Returns:
- a cache loader that delegates to the supplied
mappingFunction
- Throws:
NullPointerException
- if the mappingFunction is null
-
-