K
- type of the keyV
- type of the stores valuespublic interface Cache<K,V> extends KeyValueStore<K,V>, Closeable
HashMap
the
cache allows concurrent access and modification to its content and
automatically controls the amount of entries in the cache to stay within
configured resource limits.
A cache can be obtained via a Cache2kBuilder
, for example:
Cache<Long, List<String>> cache =
new Cache2kBuilder<Long, List<String>>() {}
.name("myCache")
.eternal(true)
.build();
Basic operation: To mutate and retrieve the cache content the operations
put(K, V)
and peek(K)
can be used, for example:
cache.put(1, "one");
cache.put(2, "two");
// might fail:
assertTrue(cache.containsKey(1));
assertEquals("two", cache.peek(2));
It is important to note that the two assertion in the above example may fail.
A cache has not the same guarantees as a data storage, because it needs to remove
content automatically as soon as resource limits are reached. This is called eviction.
Populating: A cache may automatically populate its contents via a CacheLoader
.
For typical read mostly caching this has several advantages,
for details see CacheLoader
. When using a cache loader the
additional methods for mutating the cache directly may not be needed. Some
methods, that do not interact with the loader such as containsKey(K)
may be false friends. To make the code more obvious and protect against
the accidental use of methods that do not invoke the loader transparently
a subset interface, for example the KeyValueSource
can be used.
CAS-Operations: The cache has a set of operations that examine an entry
and do a mutation in an atomic way, for example putIfAbsent(K, V)
, containsAndRemove(K)
and replaceIfEquals(K, V, V)
. To allow arbitrary semantics that operate atomically on an
EntryProcessor
can be implemented and executed via invoke(K, org.cache2k.processor.EntryProcessor<K, V, R>)
.
Compatibility: Future versions of cache2k may introduce new methods to this interface.
To improve upward compatibility applications that need to implement this interface should use
AbstractCache
or ForwardingCache
.
to create a cache
,
to manage and retrieve created caches
,
cache2k User GuideModifier and Type | Method and Description |
---|---|
ConcurrentMap<K,V> |
asMap()
Returns a map interface for operating with this cache.
|
void |
clear()
Clear the cache in a fast way, causing minimal disruption.
|
void |
clearAndClose()
This is currently identical to
close() . |
void |
close()
Free all resources and remove the cache from the CacheManager.
|
V |
computeIfAbsent(K key,
Callable<V> callable)
If the specified key is not already associated with a value (or exception),
call the provided task and associate it with the returned value.
|
boolean |
containsAndRemove(K key)
Removes the mapping for a key from the cache and returns
true if it
one was present. |
boolean |
containsKey(K key)
Returns
true , if there is a mapping for the specified key. |
Iterable<CacheEntry<K,V>> |
entries()
Iterate all entries in the cache.
|
void |
expireAt(K key,
long millis)
Updates an existing not expired mapping to expire at the given point in time.
|
V |
get(K key)
Returns a value associated with the given key.
|
Map<K,V> |
getAll(Iterable<? extends K> keys)
Retrieve values from the cache associated with the provided keys.
|
CacheManager |
getCacheManager()
Return the cache manager for this cache instance.
|
CacheEntry<K,V> |
getEntry(K key)
Returns an entry that contains the cache value associated with the given key.
|
String |
getName()
A configured or generated name of this cache instance.
|
CacheInfoMXBean |
getStatistics()
Return cache statistics.
|
<R> R |
invoke(K key,
EntryProcessor<K,V,R> entryProcessor)
Invoke a user defined function on a cache entry.
|
<R> Map<K,EntryProcessingResult<R>> |
invokeAll(Iterable<? extends K> keys,
EntryProcessor<K,V,R> entryProcessor)
Invoke a user defined function on multiple cache entries specified by the
keys parameter. |
boolean |
isClosed()
Returns
true if cache was closed or closing is in progress. |
Iterable<K> |
keys()
Iterate all keys in the cache.
|
void |
loadAll(Iterable<? extends K> keys,
CacheOperationCompletionListener listener)
Asynchronously loads the given set of keys into the cache.
|
V |
peek(K key)
Returns the value associated to the given key.
|
Map<K,V> |
peekAll(Iterable<? extends K> keys)
Bulk version for
peek(Object) |
V |
peekAndPut(K key,
V value)
Updates an existing cache entry for the specified key, so it associates
the given value, or, insert a new cache entry for this key and value.
|
V |
peekAndRemove(K key)
Removes the mapping for a key from the cache if it is present.
|
V |
peekAndReplace(K key,
V value)
Replaces the entry for a key only if currently mapped to some value.
|
CacheEntry<K,V> |
peekEntry(K key)
Returns an entry that contains the cache value associated with the given key.
|
void |
prefetch(K key)
Notifies the cache about the intention to retrieve the value for this key in the
near future.
|
void |
prefetchAll(Iterable<? extends K> keys,
CacheOperationCompletionListener listener)
Notifies the cache about the intention to retrieve the value for this key in the
near future.
|
void |
put(K key,
V value)
Inserts a new value associated with the given key or updates an
existing association of the same key with the new value.
|
void |
putAll(Map<? extends K,? extends V> valueMap)
Insert all elements of the map into the cache.
|
boolean |
putIfAbsent(K key,
V value)
If the specified key is not already associated
with a value, associate it with the given value.
|
void |
reloadAll(Iterable<? extends K> keys,
CacheOperationCompletionListener listener)
Asynchronously loads the given set of keys into the cache.
|
void |
remove(K key)
Removes the mapping for a key from the cache if it is present.
|
void |
removeAll()
Removes all cache contents.
|
void |
removeAll(Iterable<? extends K> keys)
Removes a set of keys.
|
boolean |
removeIfEquals(K key,
V expectedValue)
Remove the mapping if the stored value is the equal to the comparison value.
|
boolean |
replace(K key,
V value)
Replaces the entry for a key only if currently mapped to some value.
|
boolean |
replaceIfEquals(K key,
V oldValue,
V newValue)
Replaces the entry for a key only if currently mapped to a given value.
|
<X> X |
requestInterface(Class<X> type)
Request an alternative interface for this cache instance.
|
String |
toString()
Returns internal information.
|
String getName()
Cache2kBuilder.name(String)
V get(K key)
null
is returned.
If the CacheLoader
is invoked, subsequent requests of the same key will block
until the loading is completed. Details see CacheLoader
.
As an alternative peek(K)
can be used if the loader should
not be invoked.
get
in interface KeyValueSource<K,V>
key
- key with which the specified value is associatednull
if there was no mapping for the key.
(If nulls are permitted a null
can also indicate that the cache
previously associated null
with the key)ClassCastException
- if the class of the specified key
prevents it from being stored in this cacheNullPointerException
- if the specified key is null
IllegalArgumentException
- if some property of the specified key
prevents it from being stored in this cacheCacheLoaderException
- if the loading produced an exception .get(Object)
CacheEntry<K,V> getEntry(K key)
null
is returned.
If the loader is invoked, subsequent requests of the same key will block
until the loading is completed, details see CacheLoader
In case the cache loader yields an exception, the entry object will
be returned. The exception can be retrieved via CacheEntry.getException()
.
If null
values are present the method can be used to
check for an existent mapping and retrieve the value in one API call.
The alternative method peekEntry(K)
can be used if the loader
should not be invoked.
key
- key to retrieve the associated with the cache entryClassCastException
- if the class of the specified key
prevents it from being stored in this cacheNullPointerException
- if the specified key is nullIllegalArgumentException
- if some property of the specified key
prevents it from being stored in this cachevoid prefetch(K key)
The method will return immediately and the cache will load
the value asynchronously if not yet present in the cache. Prefetching
is done via a separate thread pool if specified via
Cache2kBuilder.prefetchExecutor(Executor)
.
If no CacheLoader
is defined the method will do nothing.
This method doesn't throw an exception in case the loader produced an exception. Exceptions will be propagated when the value is accessed.
prefetch
in interface AdvancedKeyValueSource<K,V>
key
- the key that should be loaded, not null
Cache2kBuilder.loaderThreadCount(int)
,
Cache2kBuilder.prefetchExecutor(Executor)
void prefetchAll(Iterable<? extends K> keys, CacheOperationCompletionListener listener)
The method will return immediately and the cache will load
the value asynchronously if not yet present in the cache. Prefetching
is done via a separate thread pool if specified via
Cache2kBuilder.prefetchExecutor(Executor)
.
If no CacheLoader
is defined the method will do nothing.
Exceptions from the loader will not be propagated via the listener. Exceptions will be propagated when the respective value is accessed.
prefetchAll
in interface AdvancedKeyValueSource<K,V>
keys
- the keys which should be loaded, not null
listener
- Listener interface that is invoked upon completion. May be null
if no
completion notification is needed.prefetchAll(Iterable, CacheOperationCompletionListener)
V peek(K key)
In contrast to get(Object)
this method solely operates
on the cache content and does not invoke the cache loader.
API rationale: Consequently all methods that do not invoke the loader
but return a value or a cache entry are prefixed with peek
within this interface
to make the different semantics immediately obvious by the name.
key
- key with which the specified value is associatednull
if there was no mapping for the key.
(If nulls are permitted a null
can also indicate that the cache
previously associated null
with the key)ClassCastException
- if the class of the specified key
prevents it from being stored in this cacheNullPointerException
- if the specified key is nullIllegalArgumentException
- if some property of the specified key
prevents it from being stored in this cacheCacheLoaderException
- if the loading produced an exception .CacheEntry<K,V> peekEntry(K key)
null
is returned.
The cache loader will not be invoked by this method.
In case an exception is present, for example from a load operation carried out
previously, the entry object will be returned. The exception can be
retrieved via CacheEntry.getException()
.
If null
values are present the method can be used to
check for an existent mapping and retrieve the value in one API call.
key
- key to retrieve the associated with the cache entryClassCastException
- if the class of the specified key
prevents it from being stored in this cacheNullPointerException
- if the specified key is nullIllegalArgumentException
- if some property of the specified key
prevents it from being stored in this cacheboolean containsKey(K key)
true
, if there is a mapping for the specified key.
Effect on statistics: The operation does increase the usage counter if a mapping is present, but does not count as read and therefore does not influence miss or hit values.
key
- key which association should be checkedtrue
, if this cache contains a mapping for the specified
keyClassCastException
- if the key is of an inappropriate type for
this cacheNullPointerException
- if the specified key is nullvoid put(K key, V value)
If an ExpiryPolicy
is specified in the
cache configuration it is called and will determine the expiry time.
If a CacheWriter
is registered, then it is called with the
new value. If the ExpiryPolicy
or CacheWriter
yield an exception the operation will be aborted and the previous
mapping will be preserved.
put
in interface KeyValueStore<K,V>
key
- key with which the specified value is associatedvalue
- value to be associated with the specified keyClassCastException
- if the class of the specified key or value
prevents it from being stored in this cache.NullPointerException
- if the specified key is null or the
value is null and the cache does not permit null valuesIllegalArgumentException
- if some property of the specified key
or value prevents it from being stored in this cache.CacheException
- if the cache was unable to process the request
completely, for example, if an exceptions was thrown
by a CacheWriter
put(Object, Object)
V computeIfAbsent(K key, Callable<V> callable)
if (!cache.containsKey(key)) {
V value = callable.call();
cache.put(key, value);
return value;
} else {
return cache.peek(key);
}
except that the action is performed atomically.
See put(Object, Object)
for the effects on the cache writer and
expiry calculation.
Statistics: If an entry exists this operation counts as a hit, if the entry is missing, a miss and put is counted.
Exceptions: If call throws an exception the cache contents will not be modified and the exception is propagated. The customized exception propagator is not used for this method.
Rationale: The Function
interface that Map.computeIfAbsent
uses is only
available in Java 8. Callable
is a useful fallback and we can use it directly
for the Spring integration. A mismatch is that Callable.call()
declares a checked
exception but the cache access method do not.
key
- key with which the specified value is to be associatedcallable
- task that computes the valueCacheLoaderException
- if a checked exception is thrown it is wrapped into a
CacheLoaderException
RuntimeException
- in case Callable.call()
yields a runtime exception,
this is thrown directlyClassCastException
- if the class of the specified key or value
prevents it from being stored in this cacheNullPointerException
- if the specified key is null
or the
value is null
and the cache does not permit null
valuesIllegalArgumentException
- if some property of the specified key
or value prevents it from being stored in this cacheboolean putIfAbsent(K key, V value)
if (!cache.containsKey(key)) {
cache.put(key, value);
return true;
} else {
return false;
}
except that the action is performed atomically.
See put(Object, Object)
for the effects on the cache writer and
expiry calculation.
Statistics: If an entry exists this operation counts as a hit, if the entry
is missing, a miss and put is counted. This definition is identical to the JSR107
statistics semantics. This is not consistent with other operations like
containsAndRemove(Object)
and containsKey(Object)
that don't update
the hit and miss counter if solely the existence of an entry is tested and not the
value itself is requested. This counting is subject to discussion and future change.
key
- key with which the specified value is to be associatedvalue
- value to be associated with the specified keytrue
, if no entry was present and the value was associated with the keyClassCastException
- if the class of the specified key or value
prevents it from being stored in this cacheNullPointerException
- if the specified key is null or the
value is null and the cache does not permit null valuesIllegalArgumentException
- if some property of the specified key
or value prevents it from being stored in this cacheV peekAndReplace(K key, V value)
if (cache.containsKey(key)) {
cache.put(key, value);
return cache.peek(key);
} else
return null;
except that the action is performed atomically.
As with peek(Object)
, no request to the CacheLoader
is made,
if no entry is associated to the requested key.
key
- key with which the specified value is associatedvalue
- value to be associated with the specified keynull
if there was no mapping for the key.
(A null
return can also indicate that the cache
previously associated null
with the key)ClassCastException
- if the class of the specified key or value
prevents it from being stored in this cacheNullPointerException
- if the specified key is null or the
value is null and the cache does not permit null valuesIllegalArgumentException
- if some property of the specified key
or value prevents it from being stored in this cacheCacheLoaderException
- if the loading of the entry produced
an exception, which was not suppressed and is not yet expiredboolean replace(K key, V value)
if (cache.containsKey(key)) {
cache.put(key, value);
return true
} else
return false;
except that the action is performed atomically.
Statistics: If an entry exists this operation counts as a hit, if the entry
is missing, a miss and put is counted. This definition is identical to the JSR107
statistics semantics. This is not consistent with other operations like
containsAndRemove(Object)
and containsKey(Object)
that don't update
the hit and miss counter if solely the existence of an entry is tested and not the
value itself is requested. This counting is subject to discussion and future change.
key
- key with which the specified value is associatedvalue
- value to be associated with the specified keytrue
if a mapping is present and the value was replaced.
false
if no entry is present and no action was performed.ClassCastException
- if the class of the specified key or value
prevents it from being stored in this cache.NullPointerException
- if the specified key is null or the
value is null and the cache does not permit null valuesIllegalArgumentException
- if some property of the specified key
or value prevents it from being stored in this cache.boolean replaceIfEquals(K key, V oldValue, V newValue)
if (cache.containsKey(key) && Objects.equals(cache.get(key), oldValue)) {
cache.put(key, newValue);
return true;
} else
return false;
except that the action is performed atomically.key
- key with which the specified value is associatedoldValue
- value expected to be associated with the specified keynewValue
- value to be associated with the specified keytrue
if the value was replacedClassCastException
- if the class of a specified key or value
prevents it from being stored in this mapNullPointerException
- if a specified key or value is null,
and this map does not permit null keys or valuesIllegalArgumentException
- if some property of a specified key
or value prevents it from being stored in this mapV peekAndRemove(K key)
Returns the value to which the cache previously associated the key,
or null
if the cache contained no mapping for the key.
If the cache does permit null values, then a return value of
null
does not necessarily indicate that the cache
contained no mapping for the key. It is also possible that the cache
explicitly associated the key to the value null
.
This is equivalent to
V tmp = cache.peek(key);
cache.remove(key);
return tmp;
except that the action is performed atomically.
As with peek(Object)
, no request to the CacheLoader
is made,
if no entry is associated to the requested key.
key
- key whose mapping is to be removed from the cacheNullPointerException
- if a specified key is nullClassCastException
- if the key is of an inappropriate type for
the cache. This check is optional depending on the cache
configuration.boolean containsAndRemove(K key)
true
if it
one was present.key
- key whose mapping is to be removed from the cachetrue
if the cache contained a mapping for the specified keyNullPointerException
- if a specified key is nullClassCastException
- if the key is of an inappropriate type for
the cache. This check is optional depending on the cache
configuration.void remove(K key)
If a writer is registered CacheWriter.delete(Object)
will get called.
These alternative versions of the remove operation exist:
containsAndRemove(Object)
, returning a success flagpeekAndRemove(Object)
, returning the removed valueremoveIfEquals(Object, Object)
, conditional removal matching on the current
valueSee KeyValueStore.remove(Object)
, for an explanation why no flag or object is
returned.
remove
in interface KeyValueStore<K,V>
key
- key which mapping is to be removed from the cache, not nullNullPointerException
- if a specified key is nullClassCastException
- if the key is of an inappropriate type for
this mapCacheWriterException
- if the writer call failedremove(K)
boolean removeIfEquals(K key, V expectedValue)
key
- key whose mapping is to be removed from the cacheexpectedValue
- value that must match with the existing value in the cacheNullPointerException
- if a specified key is nullClassCastException
- if the key is of an inappropriate type for
this mapvoid removeAll(Iterable<? extends K> keys)
removeAll
in interface KeyValueStore<K,V>
keys
- a set of keys to removeNullPointerException
- if a specified key is nullremoveAll(java.lang.Iterable<? extends K>)
V peekAndPut(K key, V value)
Returns the value to which the cache previously associated the key,
or null
if the cache contained no mapping for the key.
If the cache does permit null values, then a return value of
null
does not necessarily indicate that the cache
contained no mapping for the key. It is also possible that the cache
explicitly associated the key to the value null
.
This is equivalent to
V tmp = cache.peek(key);
cache.put(key, value);
return tmp;
except that the action is performed atomically.
As with peek(Object)
, no request to the CacheLoader
is made,
if no entry is associated to the requested key.
See put(Object, Object)
for the effects on the cache writer and
expiry calculation.
key
- key with which the specified value is associatedvalue
- value to be associated with the specified keytrue
if a mapping is present and the value was replaced.
false
if no entry is present and no action was performed.ClassCastException
- if the class of the specified key or value
prevents it from being stored in this cache.NullPointerException
- if the specified key is null or the
value is null and the cache does not permit null valuesIllegalArgumentException
- if some property of the specified key
or value prevents it from being stored in this cache.void expireAt(K key, long millis)
ExpiryTimeValues.NOW
and
ExpiryTimeValues.REFRESH
also effect an entry that was just
refreshed.
If the expiry time is in the past, the entry will expire immediately and refresh ahead is triggered, if enabled.
Although the special time value ExpiryTimeValues.NOW
will lead
to an effective removal of the cache entry, the writer is not called, since the
method is for cache control only.
The cache must be configured with a ExpiryPolicy
or
Cache2kBuilder.expireAfterWrite(long, TimeUnit)
otherwise expiry
timing is not available and this method will throw an exception. An immediate expire
via ExpiryTimeValues.NOW
is always working.
key
- key with which the specified value is associatedmillis
- Time in milliseconds since epoch when the entry should expire.
Also see ExpiryTimeValues
IllegalArgumentException
- if no expiry was enabled during cache setup.void loadAll(Iterable<? extends K> keys, CacheOperationCompletionListener listener)
The cache uses multiple threads to load the values in parallel. If thread resources
are not sufficient, meaning the used executor is throwing
RejectedExecutionException
the calling thread is used to produce
back pressure.
If no loader is defined, the method will throw an immediate exception.
After the load is completed, the completion listener will be called, if provided.
keys
- The keys to be loadedlistener
- Listener interface that is invoked upon completion. May be null
if no
completion notification is needed.UnsupportedOperationException
- if no loader is definedvoid reloadAll(Iterable<? extends K> keys, CacheOperationCompletionListener listener)
The cache uses multiple threads to load the values in parallel. If thread resources
are not sufficient, meaning the used executor is throwing
RejectedExecutionException
the calling thread is used to produce
back pressure.
If no loader is defined, the method will throw an immediate exception.
After the load is completed, the completion listener will be called, if provided.
keys
- The keys to be loadedlistener
- Listener interface that is invoked upon completion. May be null
if no
completion notification is needed.UnsupportedOperationException
- if no loader is defined<R> R invoke(K key, EntryProcessor<K,V,R> entryProcessor)
EntryProcessor
and MutableCacheEntry
.R
- type of the resultkey
- the key of the cache entry that should be processedentryProcessor
- processor instance to be invokedEntryProcessingException
- if an exception happened inside
EntryProcessor.process(MutableCacheEntry)
EntryProcessor
,
MutableCacheEntry
<R> Map<K,EntryProcessingResult<R>> invokeAll(Iterable<? extends K> keys, EntryProcessor<K,V,R> entryProcessor)
keys
parameter.
The order of the invocation is unspecified. To speed up processing the cache
may invoke the entry processor in parallel.
For examples and further details consult the documentation of EntryProcessor
and MutableCacheEntry
.
R
- type of the resultkeys
- the keys of the cache entries that should be processedentryProcessor
- processor instance to be invokedEntryProcessor
,
MutableCacheEntry
Map<K,V> getAll(Iterable<? extends K> keys)
Executing the request, the cache may do optimizations like utilizing multiple threads for invoking the loader or using the bulk methods on the loader. This is not yet fully exploited and will improve with further cache2k releases.
Exception handling: The method may terminate normal, even if the cache loader failed to provide values for some keys. The cache will generally do everything to delay the propagation of the exception until the key is requested, to be most specific. If the loader has permanent failures this method may throw an exception immediately.
The operation is not performed atomically. This operation may call different
loader methods either CacheLoader.loadAll(Iterable, Executor)
or
CacheLoader.load(Object)
.
Performance: A better technique is using prefetchAll(java.lang.Iterable<? extends K>, org.cache2k.CacheOperationCompletionListener)
and then get(Object)
to request the the values.
getAll
in interface AdvancedKeyValueSource<K,V>
NullPointerException
- if one of the specified keys is nullCacheLoaderException
- in case the loader has permanent failures.
Otherwise the exception is thrown when the key is requested.getAll(Iterable)
Map<K,V> peekAll(Iterable<? extends K> keys)
peek(Object)
If the cache permits null values, the map will contain entries mapped to a null value.
If the loading of an entry produced an exception, which was not
suppressed and is not yet expired. This exception will be thrown
as CacheLoaderException
when the entry is accessed
via the map interface.
The operation is not performed atomically. Mutations of the cache during this operation may or may not affect the result.
NullPointerException
- if one of the specified keys is nullIllegalArgumentException
- if some property of the specified key
prevents it from being stored in this cachevoid putAll(Map<? extends K,? extends V> valueMap)
See put(Object, Object)
for information about the
interaction with the CacheWriter
and ExpiryPolicy
putAll
in interface KeyValueStore<K,V>
valueMap
- Map of keys with associated values to be inserted in the cacheNullPointerException
- if one of the specified keys is nullIterable<K> keys()
Contract: The iteration is usable while concurrent operations happen on the cache.
All entry keys will be iterated when present in the cache at the moment
of the call to Iterable.iterator()
. An expiration or mutation
happening during the iteration, may or may not be reflected. Separate calls to
Iterable.iterator()
to the identical Iterable
instance start
a separate iteration. It is ensured that every key is only iterated once.
The iterator itself is not thread safe. Calls to one iterator instance from different threads are illegal or need proper synchronization.
Statistics: Iteration is neutral to the cache statistics.
Efficiency: Iterating keys is faster as iterating complete entries.
Iterable<CacheEntry<K,V>> entries()
See keys()
for the general iterator contract.
Efficiency: Iterating entries is less efficient then just iterating keys. The cache needs to create a new entry object and employ some sort of synchronisation to supply a consistent and immutable entry.
keys()
void removeAll()
clear
but listeners will be called.void clear()
void clearAndClose()
close()
.
This method is to future proof the API, when a persistence feature is added. In this case the method will stop cache operations and remove all stored external data.
Rationale: The corresponding method in JSR107 is CacheManager.destroyCache()
.
Decided to put it on the cache interface, because: An application can finish its operation on
a cache with one API call; to destroy all the cached data the cache must read the configuration
and build its internal representation, which leads to a "half activated" cache; the additional
call may lead to a race conditions.
void close()
The method is designed to free resources and finish operations as gracefully and fast
as possible. Some cache operations take an unpredictable long time such as the call of
the CacheLoader
, so it may happen that the cache still has threads
in use when this method returns.
After close, subsequent cache operations will throw a IllegalStateException
.
Cache operations currently in progress, may or may not terminated with an exception.
A subsequent call to close will not throw an exception.
If all caches need to be closed it is more effective to use CacheManager.close()
The next releases of cache2k may store cache entries between restarts. If an application
will never use the cached content again, the method clearAndClose()
should be used
instead.
close
in interface AutoCloseable
close
in interface Closeable
CacheManager getCacheManager()
boolean isClosed()
true
if cache was closed or closing is in progress.String toString()
IllegalStateException
in case the cache is closed, but return the
solely the cache name and no statistics.<X> X requestInterface(Class<X> type)
ConcurrentMap<K,V> asMap()
The returned map supports null
values if enabled via
Cache2kBuilder.permitNullValues(boolean)
.
The equals
and hashCode
methods of the Map
are forwarded to the
cache. A map is considered identical when from the same cache instance. This is not compatible
to the general Map
contract.
Multiple calls to this method return a new object instance which is a wrapper of the cache instance. Calling this method is a cheap operation.
The current ConcurrentMap
implementation is minimalistic and not optimized for all
usage aspects. Calling the cache methods directly could be more effective.
ConcurrentMap
wrapper for this cache instanceCacheInfoMXBean getStatistics()
null
regardless of the settings
Cache2kBuilder.enableJmx(boolean)
or Cache2kBuilder.disableStatistics(boolean)
cache2k API documentation. Copyright © 2000–2020 headissue GmbH, Munich.