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 DefaultCache();
Cache fallbackCache = new DefaultCache();
Cache selectiveCache = new SelectiveCache(aggregateCache, aggregateSelector, fallbackCache);
-
Constructor Summary
ConstructorsConstructorDescriptionSelectiveCache
(Cache nextCache, Predicate<Object> selector) Constructs aSelectiveCache
with a default in-memory delegate cache. -
Method Summary
Modifier and TypeMethodDescriptionaggregateSelector
(Class<?> type) Utility predicate to match aggregates of a given root type.void
clear()
Removes all entries from the cache.void
close()
Closes the cache and releases all associated resources.<T> T
compute
(Object id, BiFunction<? super Object, ? super T, ? extends T> mappingFunction) Computes and stores a new value for the givenid
using the provided function.<T> T
computeIfAbsent
(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> T
computeIfPresent
(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.boolean
containsKey
(Object id) Checks whether the cache contains an entry for the givenid
.<T> T
Retrieves the value associated with the givenid
, ornull
if not found.<T> void
modifyEach
(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 givenid
only if no value is currently associated.registerEvictionListener
(Consumer<CacheEviction> listener) Registers a listener to be notified whenever a cache entry is evicted or removed.<T> T
Removes the entry associated with the givenid
, if present.int
size()
Returns the number of entries currently stored in the cache.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface io.fluxcapacitor.javaclient.persisting.caching.Cache
getOrDefault, isEmpty
-
Constructor Details
-
SelectiveCache
Constructs aSelectiveCache
with a default in-memory delegate cache.- Parameters:
nextCache
- The fallback cache used whenselector
does not match a valueselector
- A predicate to decide which cache a value should go into
-
-
Method Details
-
aggregateSelector
Utility predicate to match aggregates of a given root type. This checks the type of the value inside anEntity
, or the declared type if the value is null. -
put
Description copied from interface:Cache
Puts a value in the cache for the givenid
, overwriting any existing value. -
putIfAbsent
Description copied from interface:Cache
Associates the specified value with the givenid
only if no value is currently associated.- Specified by:
putIfAbsent
in interfaceCache
- Parameters:
id
- the key to check for presencevalue
- the value to associate if absent- Returns:
- the existing value associated with the key, or
null
if the new value was successfully put
-
computeIfAbsent
Description copied from interface:Cache
If a value is not already associated with the givenid
, computes and stores one using the given function.- Specified by:
computeIfAbsent
in 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:Cache
If a value is already associated with the givenid
, computes a new value using the provided function and replaces the old one.- Specified by:
computeIfPresent
in 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
null
if the mapping function returnednull
-
compute
Description copied from interface:Cache
Computes and stores a new value for the givenid
using 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:Cache
Retrieves the value associated with the givenid
, ornull
if not found. -
containsKey
Description copied from interface:Cache
Checks whether the cache contains an entry for the givenid
.- Specified by:
containsKey
in interfaceCache
- Parameters:
id
- the key to check- Returns:
true
if the key exists in the cache,false
otherwise
-
remove
Description copied from interface:Cache
Removes the entry associated with the givenid
, if present. -
clear
public void clear()Description copied from interface:Cache
Removes all entries from the cache. -
modifyEach
Description copied from interface:Cache
Applies 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:
modifyEach
in interfaceCache
- Type Parameters:
T
- the expected type of the values- Parameters:
modifierFunction
- the function to apply to each entry
-
size
public int size()Description copied from interface:Cache
Returns the number of entries currently stored in the cache. -
registerEvictionListener
Description copied from interface:Cache
Registers a listener to be notified whenever a cache entry is evicted or removed.- Specified by:
registerEvictionListener
in interfaceCache
- Parameters:
listener
- a function that consumesCacheEviction
s- Returns:
- a registration that can be used to cancel the listener
-
close
public void close()Description copied from interface:Cache
Closes the cache and releases all associated resources.
-