Class SelectiveCache
- All Implemented Interfaces:
Cache
Cache implementation that partitions values across two internal caches based on a provided
Predicate.
If a value matches the selector, it is stored in the delegate cache; otherwise, it is stored in the
nextCache. This is particularly useful when certain types of objects (e.g., aggregates, projections) require
specialized caching behavior while others do not.
Chaining: SelectiveCache instances can be chained by using another
SelectiveCache as the nextCache. This enables complex multi-level cache routing logic, where each
level applies a different selector to direct objects to a different backing cache.
Example use case: Route aggregates to one cache and all other entities to a fallback cache:
Predicate<Object> aggregateSelector = SelectiveCache.aggregateSelector(MyAggregate.class);
Cache aggregateCache = new AdaptiveObjectCache();
Cache fallbackCache = new DefaultCache();
Cache selectiveCache = new SelectiveCache(aggregateCache, aggregateSelector, fallbackCache);
-
Constructor Summary
ConstructorsConstructorDescriptionSelectiveCache(Cache nextCache, Predicate<Object> selector) Constructs aSelectiveCachewith the currentDefaultCacheas delegate. -
Method Summary
Modifier and TypeMethodDescriptionaggregateSelector(Class<?> type) Utility predicate to match aggregates of a given root type.voidclear()Removes all entries from the cache.voidclose()Closes the cache and releases all associated resources.<T> Tcompute(Object id, BiFunction<? super Object, ? super T, ? extends T> mappingFunction) Computes and stores a new value for the givenidusing the provided function.<T> TcomputeIfAbsent(Object id, Function<? super Object, T> mappingFunction) If a value is not already associated with the givenid, computes and stores one using the given function.<T> TcomputeIfPresent(Object id, BiFunction<? super Object, ? super T, ? extends T> mappingFunction) If a value is already associated with the givenid, computes a new value using the provided function and replaces the old one.booleancontainsKey(Object id) Checks whether the cache contains an entry for the givenid.<T> TRetrieves the value associated with the givenid, ornullif not found.<T> voidmodifyEach(BiFunction<? super Object, ? super T, ? extends T> modifierFunction) Applies the given modifier function to all values currently in the cache.Puts a value in the cache for the givenid, overwriting any existing value.putIfAbsent(Object id, Object value) Associates the specified value with the givenidonly if no value is currently associated.rebuild()Returns a fresh cache instance with the same configuration and no stored entries.registerEvictionListener(Consumer<CacheEviction> listener) Registers a listener to be notified whenever a cache entry is evicted or removed.<T> TRemoves the entry associated with the givenid, if present.intsize()Returns the number of entries currently stored in the cache.
-
Constructor Details
-
SelectiveCache
Constructs aSelectiveCachewith the currentDefaultCacheas delegate.- Parameters:
nextCache- the fallback cache used whenselectordoes not match a valueselector- a predicate to decide which cache a value should go into
-
-
Method Details
-
aggregateSelector
-
put
Description copied from interface:CachePuts a value in the cache for the givenid, overwriting any existing value. -
putIfAbsent
Description copied from interface:CacheAssociates the specified value with the givenidonly if no value is currently associated.- Specified by:
putIfAbsentin interfaceCache- Parameters:
id- the key to check for presencevalue- the value to associate if absent- Returns:
- the existing value associated with the key, or
nullif the new value was successfully put
-
computeIfAbsent
Description copied from interface:CacheIf a value is not already associated with the givenid, computes and stores one using the given function.- Specified by:
computeIfAbsentin interfaceCache- Type Parameters:
T- the expected type of the value- Parameters:
id- the key to check or computemappingFunction- the function to compute a value if absent- Returns:
- the current or newly computed value
-
computeIfPresent
public <T> T computeIfPresent(Object id, BiFunction<? super Object, ? super T, ? extends T> mappingFunction) Description copied from interface:CacheIf a value is already associated with the givenid, computes a new value using the provided function and replaces the old one.- Specified by:
computeIfPresentin interfaceCache- Type Parameters:
T- the expected type of the value- Parameters:
id- the key to compute formappingFunction- the function to compute a new value from the current one- Returns:
- the newly computed value, or
nullif the mapping function returnednull
-
compute
Description copied from interface:CacheComputes and stores a new value for the givenidusing the provided function.The previous value (if any) is provided to the function. The result is stored in the cache.
-
get
Description copied from interface:CacheRetrieves the value associated with the givenid, ornullif not found. -
containsKey
Description copied from interface:CacheChecks whether the cache contains an entry for the givenid.- Specified by:
containsKeyin interfaceCache- Parameters:
id- the key to check- Returns:
trueif the key exists in the cache,falseotherwise
-
remove
Description copied from interface:CacheRemoves the entry associated with the givenid, if present. -
clear
-
modifyEach
Description copied from interface:CacheApplies the given modifier function to all values currently in the cache.This is useful for bulk modifications, e.g. adjusting internal state after a system-wide change.
- Specified by:
modifyEachin interfaceCache- Type Parameters:
T- the expected type of the values- Parameters:
modifierFunction- the function to apply to each entry
-
size
-
registerEvictionListener
Description copied from interface:CacheRegisters a listener to be notified whenever a cache entry is evicted or removed.- Specified by:
registerEvictionListenerin interfaceCache- Parameters:
listener- a function that consumesCacheEvictions- Returns:
- a registration that can be used to cancel the listener
-
rebuild
-
close
-