Class DefaultCache
java.lang.Object
io.fluxzero.sdk.persisting.caching.DefaultCache
- All Implemented Interfaces:
Cache, AutoCloseable
Default implementation of the
Cache interface using key-level synchronized access and soft references for
value storage.
This cache is optimized for concurrent environments and provides built-in support for:
- Automatic eviction based on max size (LRU policy)
- Reference-based eviction when values are no longer strongly reachable (via
SoftReference) - Expiration after a configurable duration
- Eviction notification via registered
CacheEvictionlisteners
The cache ensures thread safety through synchronized access on its internal LinkedHashMap and per-key locking
using intern() on a string prefix plus key combination. While this does introduce some memory overhead due to
string interning, it ensures atomic updates for concurrent access to the same key.
Threading: Eviction listeners and expiration polling run on background threads.
The valueMap itself is backed by a synchronized LinkedHashMap with LRU eviction behavior.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static interfaceclassprotected class -
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionConstructs a cache with a default maximum size of 1,000,000 entries and no expiration.DefaultCache(int maxSize) Constructs a cache with a specified max size and no expiration.DefaultCache(int maxSize, Duration expiry) Constructs a cache with specified size and expiration.DefaultCache(int maxSize, Executor evictionNotifier, Duration expiry) Constructs a cache with specified size, executor for eviction notifications and expiration.DefaultCache(int maxSize, Executor evictionNotifier, Duration expiry, Duration expiryCheckDelay, boolean softReferences) Constructs a cache with full configuration of size, eviction executor, expiration delay, and expiration check frequency. -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()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) Returns a synchronized computation that adds, removes, or updates a cache entry.<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.protected voidPuts 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.protected voidregisterEviction(DefaultCache.CacheReference reference, CacheEviction.Reason reason) 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.protected voidintsize()Returns the number of entries currently stored in the cache.protected <T> Tprotected DefaultCache.CacheReferenceMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Cache
getOrDefault, isEmpty
-
Field Details
-
mutexPrecursor
- See Also:
-
-
Constructor Details
-
DefaultCache
public DefaultCache()Constructs a cache with a default maximum size of 1,000,000 entries and no expiration. -
DefaultCache
public DefaultCache(int maxSize) Constructs a cache with a specified max size and no expiration. -
DefaultCache
Constructs a cache with specified size and expiration. Uses a single-threaded executor for eviction notifications. -
DefaultCache
-
DefaultCache
-
-
Method Details
-
compute
Returns a synchronized computation that adds, removes, or updates a cache entry. Internally uses per-keyString.intern()synchronization to prevent race conditions. -
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
-
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
-
remove
Description copied from interface:CacheRemoves the entry associated with the givenid, if present. -
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
-
clear
-
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
-
close
public void close()Description copied from interface:CacheCloses the cache and releases all associated resources.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCache
-
wrap
-
unwrap
-
pollReferenceQueue
protected void pollReferenceQueue() -
removeExpiredReferences
protected void removeExpiredReferences() -
registerEviction
-