Class CompactSerializationCache
- All Implemented Interfaces:
Disposable,CacheMap,ConfigurableCacheMap,ObservableMap,AutoCloseable,Map
- Direct Known Subclasses:
BlindCompactSerializationCache
ConfigurableCacheMap
which is optimized for compact on-heap footprint.
This implementation is partially thread-safe. It assumes that multiple
threads will not be accessing the same keys at the same time, nor would
any other thread be accessing this cache while a clear() operation were
going on, for example. In other words, this implementation assumes that
access to this cache is either single-threaded or gated through an object
like WrapperConcurrentMap.
- Since:
- Coherence 12.1.2
- Author:
- rhl 2013.01.23
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classThe EvictionPolicy object for the Hybrid eviction algorithm.protected classInternalEvictionPolicy is an abstract base implementation of anConfigurableCacheMap.EvictionPolicyused by this CompactSerializationCache.protected classA KeySet implementation optimized for CompactSerializationCache.protected classAn EvictionPolicy implementing the Least Frequently Used (LFU) algorithm.protected classAn EvictionPolicy implementing the Least Recently Used (LRU) algorithm.protected classEntryVisitor implementation that calculates the next eviction time.protected static classTouchCountVisitor is applied to the touch-count map by EvictionPolicy implementations that rely on the touch-count to retrieve and adjust the touch-count.protected classWrapperEvictionPolicy is used to wrap external or "custom" EvictionPolicy implementations to adapt the internal Binary key-based API to theEntry-basedAPI.Nested classes/interfaces inherited from class com.tangosol.util.AbstractKeyBasedMap
AbstractKeyBasedMap.DeferredCacheEvent<K,V>, AbstractKeyBasedMap.EntrySet, AbstractKeyBasedMap.ValuesCollection Nested classes/interfaces inherited from class com.tangosol.util.Base
Base.LoggingWriterNested classes/interfaces inherited from interface com.tangosol.net.cache.ConfigurableCacheMap
ConfigurableCacheMap.Entry, ConfigurableCacheMap.EvictionApprover, ConfigurableCacheMap.EvictionPolicy, ConfigurableCacheMap.UnitCalculator -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final doubleBy default, when the cache prunes, it reduces its entries to this percentage.protected final AtomicLongCurrent number of units to in the cache.protected final AtomicBooleanThe mutex acquired by the thread performing the cache eviction.protected final AtomicBooleanThe mutex acquired by the thread performing the cache-wide expiration.protected final booleanTrue iff the keys and values are known to be Binary (and not require conversion).protected final longThe time of the start of the "epoch", relative to which internal time-offsets are stored.protected final ClassLoaderThe ClassLoader to use for deserialization of non-Binary keys/values.protected final MultiBinaryLongMapThe MultiBinaryLongMap used for compact key (and entry-attribute) storage.protected final SimpleCacheStatisticsThe CacheStatistics for JMX.protected final BinaryStore.KeySetAwareThe BinaryStore.KeySetAware that this CompactSerializationCache uses to store data.protected final BinaryLongMap.EntryVisitorThe singleton stateless EntryVisitor used to update the ExpiryMap with the default expiry.protected ConfigurableCacheMap.EvictionApproverThe EvictionApprover.protected BinaryLongMapThe BinaryLongMap holding the expiry information for the entries in the Cache Map.protected BinaryLongMapThe BinaryLongMap holding the touch-count information for the entries in the Cache Map.protected BinaryLongMapThe BinaryLongMap holding the touch-time information for the entries in the Cache Map.protected BinaryLongMapThe BinaryLongMap holding the units for each entry in the Cache Map.protected ConfigurableCacheMap.UnitCalculatorThe unit calculator to use to limit size of the cache.protected intThe default expiry int milliseconds, or 0 for no timeout.protected longMaximum number of units to manage in the cache.protected longThe number of units to prune the cache down to.protected doubleThe percentage of the total number of units that will remain after the cache manager prunes the cache (i.e. this is the "low water mark" value); this value is in the range 0.0 to 1.0.protected booleanTrue iff this Map should operate in blind mode.protected longThe time that the last cache-wide expiry check was performed.protected MapListenerSupportThe MapListenerSupport object.protected intThe unit factor.The EvictionPolicy.Fields inherited from class com.tangosol.util.Base
DEFAULT_LOAD_FACTOR, LOG_ALWAYS, LOG_CONFIG, LOG_DEBUG, LOG_ERR, LOG_INFO, LOG_MAX, LOG_MIN, LOG_QUIET, LOG_WARN, POWER_0, POWER_G, POWER_K, POWER_M, POWER_T, UNIT_D, UNIT_H, UNIT_M, UNIT_MS, UNIT_NS, UNIT_S, UNIT_USFields inherited from interface com.tangosol.net.cache.CacheMap
EXPIRY_DEFAULT, EXPIRY_NEVER -
Constructor Summary
ConstructorsModifierConstructorDescriptionCompactSerializationCache(BinaryStoreManager mgr, boolean fBinary) Construct a CompactSerializationCache using the specified BinaryStoreManager, optionally storing only Binary keys and valuesCompactSerializationCache(BinaryStoreManager mgr, ClassLoader loader) Construct a CompactSerializationCache using the specified BinaryStoreManager and classloader.protectedCompactSerializationCache(BinaryStoreManager mgr, ClassLoader loader, boolean fBinary) Construct a CompactSerializationCache using the specified BinaryStoreManager. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddMapListener(MapListener listener) Add a standard map listener that will receive all events (inserts, updates, deletes) that occur against the map, with the key, old-value and new-value included.voidaddMapListener(MapListener listener, Filter filter, boolean fLite) Add a map listener that receives events based on a filter evaluation.voidaddMapListener(MapListener listener, Object oKey, boolean fLite) Add a map listener for a specific key.protected intcalculateUnits(Binary binKey, Binary binValue) Calculate the unit cost of the specified cache entry, according to the configured unit-calculator.protected voidcheckExpiry(boolean fForce) Check the cache entries for expiration, removing expired entries as necessary.protected voidcheckExpiry(Binary binKey) Check the specified key to see if it is expired, removing it if necessary.protected voidCheck the current size of the cache to see that it is within the configuredhigh-units, evicting entries according to the configuredConfigurableCacheMap.EvictionPolicyif necessary.protected voidcheckSize(boolean fCheckExpiry) Check the current size of the cache to see that it is within the configuredhigh-units, evicting entries according to the configuredConfigurableCacheMap.EvictionPolicyif necessary.voidclear()Clear all key/value mappings.protected voidEnsure that the BinaryLongMaps required for eviction support are configured.booleancontainsKey(Object oKey) Returns true if this map contains a mapping for the specified key.booleancontainsValue(Object oValue) Returns true if this Map maps one or more keys to the specified value.protected longdecodeExpiry(long cExpiryEncoded) Decode the specified encoded expiry value into an absolute time.protected longdecodeTime(int cEncoded) Decode the specified encoded time into an absolute ldt.protected voiddispatchEvent(int nId, Binary binKey, Object oKey, Object oValueOld, Object oValueNew, boolean fSynthetic) Dispatch the passed event.voiddispose()Invoked when all resources owned by the implementer can safely be released.protected longencodeExpiry(long cExpiryDelay) Encode the specified expiry delay (relative to current time) into the internal format.protected intencodeTime(long ldt) Encode the specified time into an opaque 32-bit value.protected BinaryLongMapEnsure that the expiry-map is initialized.voidevict()Evict all entries from the cache that are no longer valid, and potentially prune the cache size if the cache is size-limited and its size is above the caching low water mark.voidEvict a specified key from the cache, as if it had expired from the cache.voidevictAll(Collection colKeys) Evict the specified keys from the cache, as if they had each expired from the cache.protected intevictInternal(Binary binKey) Attempt to evict the cache entry for the specified key from the cache as a result of either expiration or size-triggered eviction, returning the unit-size of the evicted entry, or 0 if the eviction was disallowed by theConfigurableCacheMap.EvictionApprover.protected ObjectfromBinary(Binary bin) Translate the passed Binary object into an Object object.Returns the value to which this map maps the specified key.Returns the BinaryStore that this map uses for its storage.getCacheEntry(Object oKey) Locate a cache Entry in the cache based on its key.protected ConfigurableCacheMap.EntrygetCacheEntryInternal(Binary binKey) Return aConfigurableCacheMap.Entryfor the specified key.protected ConfigurableCacheMap.EntrygetCacheEntryInternal(Binary binKey, Object oKey) Return aConfigurableCacheMap.Entryfor the specified key.Returns the CacheStatistics for this cache.Return the configured ClassLoader, or null if none is configured.protected intgetEntryUnits(Binary binKey) Return the unit-size of the entry associated with the specified key, or 0 if the key does not exist.Obtain the registered EvictionApprover.Obtain the current EvictionPolicy used by the cache.intDetermine the default "time to live" for each individual cache entry.Return the BinaryLongMap associating the entries in this cache map with their corresponding expiry.intDetermine the limit of the cache size in units.Return the InternalEvictionPolicy used by this CompactSerializationCache.protected BinaryLongMapReturn a BinaryLongMap whose values have no meaning, but whose keys can be used internally to detect the presence of an entry in the cache map.intDetermine the point to which the cache will shrink when it prunes.longDetermine the next expiry time for the cache entries.Return the BinaryLongMap associating the entries in this cache map with their corresponding touch count.Return the BinaryLongMap associating the entries in this cache map with their corresponding last "touch" time.Obtain the current UnitCalculator used by the cache.intDetermine the factor by which the Units, LowUnits and HighUnits properties are adjusted.intgetUnits()Determine the number of units that the cache currently stores.Return the BinaryLongMap associating the entries in this cache map with their size in "units".protected booleanDetermine if the cache map has any listeners at all.protected AbstractKeyBasedMap.DeferredCacheEventinstantiateDeferredCacheEvent(int nId, Binary binKey, Object oKey, Object oValueOld, Object oValueNew, boolean fSynthetic) Create a DeferredCacheEvent object with the provided arguments.protected SetFactory pattern: Create a Set that represents the keys in the MapbooleanDetermine if the keys and values in this map are known to be all Binary.booleanisBlind()Return whether this CompactSerializationCache instance is in blind mode.protected IteratorCreate an iterator over the keys in this Map.Associates the specified value with the specified key in this map.Associates the specified value with the specified key in this cache.protected voidregisterExpiry(Binary binKey, long cExpiry) Register the expiry for the specified key.Removes the mapping for this key from this map if present.protected booleanremoveBlind(Object oKey) Removes the mapping for this key from this map if present.protected ObjectremoveInternal(Object oKey, Binary binKey, boolean fBlind) Remove the given key from theBinaryStoreonly loading the value if necessary.voidremoveMapListener(MapListener listener) Remove a standard map listener that previously signed up for all events.voidremoveMapListener(MapListener listener, Filter filter) Remove a map listener that previously signed up for events based on a filter evaluation.voidremoveMapListener(MapListener listener, Object oKey) Remove a map listener that previously signed up for events about a specific key.voidsetBlind(boolean fBlind) Set whether this CompactSerializationCache instance should operate under a blind mode.voidSet the EvictionApprover for this ConfigurableCacheMap.voidSet the EvictionPolicy for the cache to use.voidsetExpiryDelay(int cMillis) Specify the default "time to live" for cache entries.protected voidsetExpiryMap(BinaryLongMap blmExpiry) Set the BinaryLongMap to use to associate the entries in this cache map with their corresponding expiry.voidsetHighUnits(int cMax) Update the maximum size of the cache in units.voidsetLowUnits(int cUnits) Specify the point to which the cache will shrink when it prunes.protected voidsetTouchCountMap(BinaryLongMap blmTouch) Return the BinaryLongMap to use to associate the entries in this cache map with their corresponding "touch" count.protected voidsetTouchTimeMap(BinaryLongMap blmTouch) Return the BinaryLongMap to use to associate the entries in this cache map with their corresponding last "touch" time.voidsetUnitCalculator(ConfigurableCacheMap.UnitCalculator calculator) Set the UnitCalculator for the cache to use.voidsetUnitFactor(int nFactor) Determine the factor by which the Units, LowUnits and HighUnits properties are adjusted.protected voidsetUnitsMap(BinaryLongMap blmUnits) Set the BinaryLongMap to use to associate the entries in this cache map with their size in "units".intsize()Returns the number of key-value mappings in this map.protected BinaryTranslate the passed Object object into an Binary object.protected static inttoExternalUnits(long cUnits, int nFactor) Convert from an internal 64-bit unit value to an external 32-bit unit value using the configured units factor.protected static longtoInternalUnits(int cUnits, int nFactor) Convert from an external 32-bit unit value to an internal 64-bit unit value using the configured units factor.toString()Returns a string representation of this Map.protected voidRegister a "touch" of the specified key.protected voidupdateUnits(Binary binKey, int cUnits) Update the units associated with the specified key.Methods inherited from class com.tangosol.util.AbstractKeyBasedMap
clone, entrySet, equals, getAll, hashCode, instantiateEntrySet, instantiateValues, isEmpty, keySet, putAll, valuesMethods inherited from class com.tangosol.util.Base
azzert, azzert, azzert, azzertFailed, breakLines, breakLines, capitalize, checkNotEmpty, checkNotNull, checkRange, computeSafeWaitTime, decimalValue, dup, dup, ensureBigDecimal, ensureClassLoader, ensureRuntimeException, ensureRuntimeException, equals, equalsDeep, err, err, err, err, err, escape, formatDateTime, getCallerStackFrame, getCommonMonitor, getCommonMonitor, getCommonMonitor, getContextClassLoader, getContextClassLoader, getDeepMessage, getErr, getLastSafeTimeMillis, getLog, getMaxDecDigits, getMaxHexDigits, getOriginalException, getOut, getProcessRandom, getRandom, getRandomBinary, getRandomBinary, getRandomString, getSafeTimeMillis, getStackFrame, getStackFrames, getStackTrace, getStackTrace, getStackTrace, getThreadFactory, getTimeZone, getUpTimeMillis, hashCode, hexValue, indentString, indentString, isDecimal, isHex, isLogEcho, isOctal, log, log, log, log, log, makeInteger, makeLong, makeThread, mergeArray, mergeBooleanArray, mergeByteArray, mergeCharArray, mergeDoubleArray, mergeFloatArray, mergeIntArray, mergeLongArray, mod, mod, newHashMap, newHashMap, newHashSet, newHashSet, octalValue, out, out, out, out, out, pad, parseBandwidth, parseBandwidth, parseDelimitedString, parseHex, parseHex, parseMemorySize, parseMemorySize, parsePercentage, parseTime, parseTime, parseTimeNanos, parseTimeNanos, printStackTrace, randomize, randomize, randomize, randomize, read, read, read, read, read, read, read, replace, setErr, setLog, setLogEcho, setOut, sleep, toBandwidthString, toBandwidthString, toCharEscape, toCrc, toCrc, toCrc, toCrc, toCrc, toDecString, toDelimitedString, toDelimitedString, toDelimitedString, toDelimitedString, toHex, toHex, toHexDump, toHexEscape, toHexEscape, toHexEscape, toHexEscape, toHexString, toMemorySizeString, toMemorySizeString, toQuotedCharEscape, toQuotedStringEscape, toSqlString, toString, toString, toStringEscape, toUnicodeEscape, trace, trace, trace, trace, trace, trace, trace, trace, trace, truncateString, truncateString, waitMethods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface com.oracle.coherence.common.base.Disposable
closeMethods inherited from interface java.util.Map
compute, computeIfAbsent, computeIfPresent, entrySet, equals, forEach, getOrDefault, hashCode, isEmpty, keySet, merge, putAll, putIfAbsent, remove, replace, replace, replaceAll, values
-
Field Details
-
DEFAULT_PRUNE
public static final double DEFAULT_PRUNEBy default, when the cache prunes, it reduces its entries to this percentage.- See Also:
-
m_blmExpiry
The BinaryLongMap holding the expiry information for the entries in the Cache Map. -
m_blmTouchTime
The BinaryLongMap holding the touch-time information for the entries in the Cache Map. -
m_blmTouchCount
The BinaryLongMap holding the touch-count information for the entries in the Cache Map. -
m_blmUnits
The BinaryLongMap holding the units for each entry in the Cache Map. -
f_store
The BinaryStore.KeySetAware that this CompactSerializationCache uses to store data. -
m_cMaxUnits
protected long m_cMaxUnitsMaximum number of units to manage in the cache. -
m_dflPruneLevel
protected double m_dflPruneLevelThe percentage of the total number of units that will remain after the cache manager prunes the cache (i.e. this is the "low water mark" value); this value is in the range 0.0 to 1.0. -
m_cPruneUnits
protected long m_cPruneUnitsThe number of units to prune the cache down to. -
f_atomicCurUnits
Current number of units to in the cache. -
m_calculator
The unit calculator to use to limit size of the cache. -
m_nUnitFactor
protected int m_nUnitFactorThe unit factor. -
m_cExpiryDelay
protected int m_cExpiryDelayThe default expiry int milliseconds, or 0 for no timeout. -
m_ldtNextExpiryCheck
protected long m_ldtNextExpiryCheckThe time that the last cache-wide expiry check was performed. -
m_policy
The EvictionPolicy. -
m_apprvrEvict
The EvictionApprover. -
m_listenerSupport
The MapListenerSupport object. -
m_fBlind
protected boolean m_fBlindTrue iff this Map should operate in blind mode. Blind mode allows a Map implementation to forgo the often costly parts of the Map API, in particular returning the previous value for both remove and put operations. Additionally, for CCMs that dispatch events fetching the previous value can also be avoided. -
f_mblm
The MultiBinaryLongMap used for compact key (and entry-attribute) storage. -
f_atomicExpiringMutex
The mutex acquired by the thread performing the cache-wide expiration. -
f_atomicEvictingMutex
The mutex acquired by the thread performing the cache eviction. -
f_fBinary
protected final boolean f_fBinaryTrue iff the keys and values are known to be Binary (and not require conversion). -
f_loader
The ClassLoader to use for deserialization of non-Binary keys/values. -
f_ldtEpoch
protected final long f_ldtEpochThe time of the start of the "epoch", relative to which internal time-offsets are stored. -
f_visitorDefaultExpiry
The singleton stateless EntryVisitor used to update the ExpiryMap with the default expiry. SeeregisterExpiry(com.tangosol.util.Binary, long). -
f_stats
The CacheStatistics for JMX.
-
-
Constructor Details
-
CompactSerializationCache
Construct a CompactSerializationCache using the specified BinaryStoreManager and classloader.- Parameters:
mgr- the BinaryStoreManager to use to create the BinaryStoreloader- the ClassLoader to use for deserialization
-
CompactSerializationCache
Construct a CompactSerializationCache using the specified BinaryStoreManager, optionally storing only Binary keys and values- Parameters:
mgr- the BinaryStoreManager to use to create the BinaryStorefBinary- true iff only Binary keys and values are to be stored
-
CompactSerializationCache
Construct a CompactSerializationCache using the specified BinaryStoreManager.- Parameters:
mgr- the BinaryStoreManager to use to create the BinaryStoreloader- the ClassLoader to use for deserializationfBinary- true iff only Binary keys and values are to be stored
-
-
Method Details
-
getBinaryStore
Returns the BinaryStore that this map uses for its storage.- Returns:
- the BinaryStore
-
getClassLoader
Return the configured ClassLoader, or null if none is configured.- Returns:
- the classloader to use for deserialization, or null
-
isBinaryMap
public boolean isBinaryMap()Determine if the keys and values in this map are known to be all Binary.- Returns:
- true if all keys and values will be Binary to start with, and thus will not require conversion
-
getExpiryMap
Return the BinaryLongMap associating the entries in this cache map with their corresponding expiry.Note: it is legal for an expiry to be 0 (meaning no-expiry), but the contract of the BinaryLongMap considers 0 to be missing, so operations such as size() and keys() on the returned BLM will not reflect the entire set of keys in this cache
- Returns:
- the BinaryLongMap holding the expiry information
-
setExpiryMap
Set the BinaryLongMap to use to associate the entries in this cache map with their corresponding expiry.- Parameters:
blmExpiry- the BinaryLongMap to use to hold the expiry information
-
getKeyMap
Return a BinaryLongMap whose values have no meaning, but whose keys can be used internally to detect the presence of an entry in the cache map.Note: the returned BinaryLongMap may not be mutated.
- Returns:
- a BinaryLongMap containing all keys in this CacheMap, mapped to an unspecified value
-
getTouchTimeMap
Return the BinaryLongMap associating the entries in this cache map with their corresponding last "touch" time. A "touch" is any access (read or write) to an entry.- Returns:
- the BinaryLongMap holding the touch-time information
-
setTouchTimeMap
Return the BinaryLongMap to use to associate the entries in this cache map with their corresponding last "touch" time. A "touch" is any access (read or write) to an entry.- Parameters:
blmTouch- the BinaryLongMap holding the touch-time information
-
getTouchCountMap
Return the BinaryLongMap associating the entries in this cache map with their corresponding touch count. A "touch" is any access (read or write) to an entry.- Returns:
- the BinaryLongMap holding the touch count information
-
setTouchCountMap
Return the BinaryLongMap to use to associate the entries in this cache map with their corresponding "touch" count. A "touch" is any access (read or write) to an entry.- Parameters:
blmTouch- the BinaryLongMap holding the touch count information
-
getUnitsMap
Return the BinaryLongMap associating the entries in this cache map with their size in "units".- Returns:
- the BinaryLongMap holding the units
-
setUnitsMap
Set the BinaryLongMap to use to associate the entries in this cache map with their size in "units".- Parameters:
blmUnits- the BinaryLongMap to use for storing the units
-
hasListeners
protected boolean hasListeners()Determine if the cache map has any listeners at all.- Returns:
- true iff this cache map has at least one MapListener
-
getCacheStatistics
Returns the CacheStatistics for this cache.Note: this method is invoked reflectively by the CacheModel
- Returns:
- a CacheStatistics object
-
isBlind
public boolean isBlind()Return whether this CompactSerializationCache instance is in blind mode. Blind mode allows this Map implementation to forgo the often costly parts of the Map API, in particular returning the previous value for both remove and put operations.- Returns:
- whether this CompactSerializationCache is operating in a blind mode
-
setBlind
public void setBlind(boolean fBlind) Set whether this CompactSerializationCache instance should operate under a blind mode.- Parameters:
fBlind- whether this CompactSerializationCache should operate under a blind mode
-
size
public int size()Returns the number of key-value mappings in this map.- Specified by:
sizein interfaceMap- Overrides:
sizein classAbstractKeyBasedMap- Returns:
- the number of key-value mappings in this map
-
containsKey
Returns true if this map contains a mapping for the specified key.- Specified by:
containsKeyin interfaceMap- Overrides:
containsKeyin classAbstractKeyBasedMap- Returns:
- true if this map contains a mapping for the specified key, false otherwise.
-
containsValue
Returns true if this Map maps one or more keys to the specified value.- Specified by:
containsValuein interfaceMap- Overrides:
containsValuein classAbstractKeyBasedMap- Returns:
- true if this Map maps one or more keys to the specified value, false otherwise
-
get
Returns the value to which this map maps the specified key.- Specified by:
getin interfaceMap- Specified by:
getin classAbstractKeyBasedMap- Parameters:
oKey- the key object- Returns:
- the value to which this map maps the specified key, or null if the map contains no mapping for this key
-
remove
Removes the mapping for this key from this map if present. Expensive: updates both the underlying cache and the local cache.- Specified by:
removein interfaceMap- Overrides:
removein classAbstractKeyBasedMap- Parameters:
oKey- key whose mapping is to be removed from the map- Returns:
- previous value associated with specified key, or null if there was no mapping for key. A null return can also indicate that the map previously associated null with the specified key, if the implementation supports null values.
-
clear
public void clear()Clear all key/value mappings.- Specified by:
clearin interfaceMap- Overrides:
clearin classAbstractKeyBasedMap
-
put
Associates the specified value with the specified key in this map.- Specified by:
putin interfaceCacheMap- Specified by:
putin interfaceMap- Overrides:
putin classAbstractKeyBasedMap- Parameters:
oKey- key with which the specified value is to be associatedoValue- value to be associated with the specified key- Returns:
- previous value associated with specified key, or null if there was no mapping for key
-
put
Associates the specified value with the specified key in this cache. If the cache previously contained a mapping for this key, the old value is replaced. This variation of theCacheMap.put(Object oKey, Object oValue)method allows the caller to specify an expiry (or "time to live") for the cache entry.- Specified by:
putin interfaceCacheMap- Parameters:
oKey- key with which the specified value is to be associatedoValue- value to be associated with the specified keycExpiry- the number of milliseconds until the cache entry will expire, also referred to as the entry's "time to live"; passCacheMap.EXPIRY_DEFAULTto use the cache's default time-to-live setting; passCacheMap.EXPIRY_NEVERto indicate that the cache entry should never expire; this milliseconds value is not a date/time value, such as is returned from System.currentTimeMillis()- Returns:
- previous value associated with specified key, or null if there was no mapping for key. A null return can also indicate that the map previously associated null with the specified key, if the implementation supports null values
-
instantiateKeySet
Factory pattern: Create a Set that represents the keys in the Map- Overrides:
instantiateKeySetin classAbstractKeyBasedMap- Returns:
- a new instance of Set that represents the keys in the Map
-
iterateKeys
Create an iterator over the keys in this Map. The Iterator must support remove() if the Map supports removal.- Specified by:
iterateKeysin classAbstractKeyBasedMap- Returns:
- a new instance of an Iterator over the keys in this Map
-
removeBlind
Removes the mapping for this key from this map if present. This method exists to allow sub-classes to optimize remove functionality for situations in which the original value is not required.- Overrides:
removeBlindin classAbstractKeyBasedMap- Parameters:
oKey- key whose mapping is to be removed from the map- Returns:
- true iff the Map changed as the result of this operation
-
getUnits
public int getUnits()Determine the number of units that the cache currently stores.Note: It is expected that the return type will be widened to a long in Coherence 4.
- Specified by:
getUnitsin interfaceConfigurableCacheMap- Returns:
- the current size of the cache in units
-
getHighUnits
public int getHighUnits()Determine the limit of the cache size in units. The cache will prune itself automatically once it reaches its maximum unit level. This is often referred to as the "high water mark" of the cache.Note: It is expected that the return type will be widened to a long in Coherence 4.
- Specified by:
getHighUnitsin interfaceConfigurableCacheMap- Returns:
- the limit of the cache size in units
-
setHighUnits
public void setHighUnits(int cMax) Update the maximum size of the cache in units. This is often referred to as the "high water mark" of the cache.Note: It is expected that the parameter will be widened to a long in Coherence 4.
- Specified by:
setHighUnitsin interfaceConfigurableCacheMap- Parameters:
cMax- the new maximum size of the cache, in units
-
getLowUnits
public int getLowUnits()Determine the point to which the cache will shrink when it prunes. This is often referred to as a "low water mark" of the cache. If the cache incrementally prunes, then this setting will have no effect.Note: It is expected that the parameter will be widened to a long in Coherence 4.
- Specified by:
getLowUnitsin interfaceConfigurableCacheMap- Returns:
- the number of units that the cache prunes to
-
setLowUnits
public void setLowUnits(int cUnits) Specify the point to which the cache will shrink when it prunes. This is often referred to as a "low water mark" of the cache.Note: It is expected that the parameter will be widened to a long in Coherence 4.
- Specified by:
setLowUnitsin interfaceConfigurableCacheMap- Parameters:
cUnits- the number of units that the cache prunes to
-
getUnitFactor
public int getUnitFactor()Determine the factor by which the Units, LowUnits and HighUnits properties are adjusted. Using a binary unit calculator, for example, the factor 1048576 could be used to count megabytes instead of bytes.Note: This property exists only to avoid changing the type of the units, low units and high units properties from 32-bit values to 64-bit values. It is expected that the parameter will be dropped in Coherence 4.
- Specified by:
getUnitFactorin interfaceConfigurableCacheMap- Returns:
- the units factor; the default is 1
-
setUnitFactor
public void setUnitFactor(int nFactor) Determine the factor by which the Units, LowUnits and HighUnits properties are adjusted. Using a binary unit calculator, for example, the factor 1048576 could be used to count megabytes instead of bytes.Note: This property exists only to avoid changing the type of the units, low units and high units properties from 32-bit values to 64-bit values. It is expected that the parameter will be dropped in Coherence 4.
- Specified by:
setUnitFactorin interfaceConfigurableCacheMap- Parameters:
nFactor- the units factor; the default is 1
-
evict
Evict a specified key from the cache, as if it had expired from the cache. If the key is not in the cache, then the method has no effect.- Specified by:
evictin interfaceConfigurableCacheMap- Parameters:
oKey- the key to evict from the cache
-
evictAll
Evict the specified keys from the cache, as if they had each expired from the cache.The result of this method is defined to be semantically the same as the following implementation:
for (Iterator iter = colKeys.iterator(); iter.hasNext(); ) { Object oKey = iter.next(); evict(oKey); }- Specified by:
evictAllin interfaceConfigurableCacheMap- Parameters:
colKeys- a collection of keys to evict from the cache
-
evict
public void evict()Evict all entries from the cache that are no longer valid, and potentially prune the cache size if the cache is size-limited and its size is above the caching low water mark.- Specified by:
evictin interfaceConfigurableCacheMap
-
getEvictionApprover
Obtain the registered EvictionApprover.- Specified by:
getEvictionApproverin interfaceConfigurableCacheMap- Returns:
- the EvictionApprover (could be null)
-
setEvictionApprover
Set the EvictionApprover for this ConfigurableCacheMap.- Specified by:
setEvictionApproverin interfaceConfigurableCacheMap- Parameters:
approver- the EvictionApprover
-
getExpiryDelay
public int getExpiryDelay()Determine the default "time to live" for each individual cache entry.- Specified by:
getExpiryDelayin interfaceConfigurableCacheMap- Returns:
- the number of milliseconds that a cache entry value will live, or zero if cache entries are never automatically expired
-
setExpiryDelay
public void setExpiryDelay(int cMillis) Specify the default "time to live" for cache entries. This does not affect the already-scheduled expiry of existing entries.- Specified by:
setExpiryDelayin interfaceConfigurableCacheMap- Parameters:
cMillis- the number of milliseconds that cache entries will live, or zero to disable automatic expiry
-
getNextExpiryTime
public long getNextExpiryTime()Determine the next expiry time for the cache entries. This value is supposed to be used only by the "active" expiry algorithms, so for implementations that choose to return the value of zero the entries will be evicted as with pre-existing "passive" expiry approach.- Specified by:
getNextExpiryTimein interfaceConfigurableCacheMap- Returns:
- the earliest time (using the
SafeClock) that one or more cache entries will expire or zero if the cache is empty, its entries never expire or the implementation chooses to avoid the pro-active eviction
-
getCacheEntry
Locate a cache Entry in the cache based on its key.- Specified by:
getCacheEntryin interfaceConfigurableCacheMap- Parameters:
oKey- the key object to search for- Returns:
- the Entry or null
-
getEvictionPolicy
Obtain the current EvictionPolicy used by the cache.- Specified by:
getEvictionPolicyin interfaceConfigurableCacheMap- Returns:
- the EvictionPolicy used by the cache
-
getInternalEvictionPolicy
Return the InternalEvictionPolicy used by this CompactSerializationCache.Note: this method returns the actual instance of EvictionPolicy being used by this cache, which may differ in implementation from the configured policy returned by
getEvictionPolicy().- Returns:
- the internal eviction policy
-
setEvictionPolicy
Set the EvictionPolicy for the cache to use.- Specified by:
setEvictionPolicyin interfaceConfigurableCacheMap- Parameters:
policy- an EvictionPolicy
-
getUnitCalculator
Obtain the current UnitCalculator used by the cache.- Specified by:
getUnitCalculatorin interfaceConfigurableCacheMap- Returns:
- the UnitCalculator used by the cache
-
setUnitCalculator
Set the UnitCalculator for the cache to use.- Specified by:
setUnitCalculatorin interfaceConfigurableCacheMap- Parameters:
calculator- a UnitCalculator
-
addMapListener
Add a standard map listener that will receive all events (inserts, updates, deletes) that occur against the map, with the key, old-value and new-value included. This has the same result as the following call:addMapListener(listener, (Filter) null, false);
- Specified by:
addMapListenerin interfaceObservableMap- Parameters:
listener- theMapEventlistener to add
-
removeMapListener
Remove a standard map listener that previously signed up for all events. This has the same result as the following call:removeMapListener(listener, (Filter) null);
- Specified by:
removeMapListenerin interfaceObservableMap- Parameters:
listener- the listener to remove
-
addMapListener
Add a map listener for a specific key.The listeners will receive MapEvent objects, but if fLite is passed as true, they might not contain the OldValue and NewValue properties.
To unregister the MapListener, use the
ObservableMap.removeMapListener(MapListener, Object)method.- Specified by:
addMapListenerin interfaceObservableMap- Parameters:
listener- theMapEventlistener to addoKey- the key that identifies the entry for which to raise eventsfLite- true to indicate that theMapEventobjects do not have to include the OldValue and NewValue property values in order to allow optimizations
-
removeMapListener
Remove a map listener that previously signed up for events about a specific key.- Specified by:
removeMapListenerin interfaceObservableMap- Parameters:
listener- the listener to removeoKey- the key that identifies the entry for which to raise events
-
addMapListener
Add a map listener that receives events based on a filter evaluation.The listeners will receive MapEvent objects, but if fLite is passed as true, they might not contain the OldValue and NewValue properties.
To unregister the MapListener, use the
ObservableMap.removeMapListener(MapListener, Filter)method.- Specified by:
addMapListenerin interfaceObservableMap- Parameters:
listener- theMapEventlistener to addfilter- a filter that will be passed MapEvent objects to select from; a MapEvent will be delivered to the listener only if the filter evaluates to true for that MapEvent (seeMapEventFilter); null is equivalent to a filter that alway returns truefLite- true to indicate that theMapEventobjects do not have to include the OldValue and NewValue property values in order to allow optimizations
-
removeMapListener
Remove a map listener that previously signed up for events based on a filter evaluation.- Specified by:
removeMapListenerin interfaceObservableMap- Parameters:
listener- the listener to removefilter- the filter that was passed into the corresponding addMapListener() call
-
dispose
public void dispose()Invoked when all resources owned by the implementer can safely be released.Once disposed of the object should no longer be considered to be usable.
Note the Disposable interface is compatible with try-with-resources which will automatically invoke this method.
- Specified by:
disposein interfaceDisposable
-
instantiateDeferredCacheEvent
protected AbstractKeyBasedMap.DeferredCacheEvent instantiateDeferredCacheEvent(int nId, Binary binKey, Object oKey, Object oValueOld, Object oValueNew, boolean fSynthetic) Create a DeferredCacheEvent object with the provided arguments. TheoValueOldmay be null as the deferred event may callloadupon request.- Parameters:
nId- this event's id, one ofMapEvent.ENTRY_INSERTED,MapEvent.ENTRY_UPDATEDorMapEvent.ENTRY_DELETEDbinKey- the binary key into the mapoKey- the key into the mapoValueOld- optional old value (for update and delete events); if not provided a call to getOldValue will load the old value from the BinaryStoreoValueNew- the new value (for insert and update events)fSynthetic- true iff the event is caused by the cache internal processing such as eviction or loading- Returns:
- a DeferredCacheEvent object
-
dispatchEvent
protected void dispatchEvent(int nId, Binary binKey, Object oKey, Object oValueOld, Object oValueNew, boolean fSynthetic) Dispatch the passed event.- Parameters:
nId- this event's id, one ofMapEvent.ENTRY_INSERTED,MapEvent.ENTRY_UPDATEDorMapEvent.ENTRY_DELETEDbinKey- the binary key into the mapoKey- the key into the mapoValueOld- optional old value (for update and delete events); if not provided a call to getOldValue will load the old value from the BinaryStoreoValueNew- the new value (for insert and update events)fSynthetic- true iff the event is caused by the cache internal processing such as eviction or loading
-
toString
Returns a string representation of this Map. The string representation consists of a list of key-value mappings in the order returned by the Map's entrySet view's iterator, enclosed in braces ("{}"). Adjacent mappings are separated by the characters ", " (comma and space). Each key-value mapping is rendered as the key followed by an equals sign ("=") followed by the associated value. Keys and values are converted to strings as by String.valueOf(Object).- Overrides:
toStringin classAbstractKeyBasedMap- Returns:
- a String representation of this Map
-
removeInternal
Remove the given key from theBinaryStoreonly loading the value if necessary.- Parameters:
oKey- the key to be removedbinKey- the binary key to be removedfBlind- whether the remove should be blind- Returns:
- the previous value or an indicator (
OBJECT_EXISTS) to suggest the object did exist iffBlindis true
-
configureEviction
protected void configureEviction()Ensure that the BinaryLongMaps required for eviction support are configured. -
ensureExpiryMap
Ensure that the expiry-map is initialized.- Returns:
- the expiry map
-
checkExpiry
protected void checkExpiry(boolean fForce) Check the cache entries for expiration, removing expired entries as necessary.- Parameters:
fForce- pass true to force the expiry check, or false to only run it if it hasn't been run in a while
-
checkExpiry
Check the specified key to see if it is expired, removing it if necessary. This method will also ensure that other cache entries which are ripe for expiration will eventually be expired before too many accumulate.- Parameters:
binKey- the key to check for expiration
-
checkSize
protected void checkSize()Check the current size of the cache to see that it is within the configuredhigh-units, evicting entries according to the configuredConfigurableCacheMap.EvictionPolicyif necessary. -
checkSize
protected void checkSize(boolean fCheckExpiry) Check the current size of the cache to see that it is within the configuredhigh-units, evicting entries according to the configuredConfigurableCacheMap.EvictionPolicyif necessary.- Parameters:
fCheckExpiry- true iff the expiry should be checked if eviction is called for
-
touch
Register a "touch" of the specified key.- Parameters:
binKey- the key that was touched
-
evictInternal
Attempt to evict the cache entry for the specified key from the cache as a result of either expiration or size-triggered eviction, returning the unit-size of the evicted entry, or 0 if the eviction was disallowed by theConfigurableCacheMap.EvictionApprover.- Parameters:
binKey- the key to evict- Returns:
- the number of units evicted
-
registerExpiry
Register the expiry for the specified key.- Parameters:
binKey- the keycExpiry- the number of milliseconds until the cache entry will expire, also referred to as the entry's "time to live" or 0 to indicate that the cache entry should never expire
-
getEntryUnits
Return the unit-size of the entry associated with the specified key, or 0 if the key does not exist.- Parameters:
binKey- the key- Returns:
- the unit-size of the entry associated with the specified key
-
calculateUnits
Calculate the unit cost of the specified cache entry, according to the configured unit-calculator.- Parameters:
binKey- the keybinValue- the value- Returns:
- the unit cost of the cache entry
-
updateUnits
Update the units associated with the specified key.- Parameters:
binKey- the keycUnits- the units
-
toBinary
Translate the passed Object object into an Binary object.- Parameters:
o- the Object to serialize into a Binary object- Returns:
- the Binary object
-
fromBinary
Translate the passed Binary object into an Object object.- Parameters:
bin- the Binary object to deserialize- Returns:
- the deserialized object
-
getCacheEntryInternal
Return aConfigurableCacheMap.Entryfor the specified key.- Parameters:
binKey- the binary or "raw" form of the key- Returns:
- an Entry representing the specified key
-
getCacheEntryInternal
Return aConfigurableCacheMap.Entryfor the specified key.- Parameters:
binKey- the binary or "raw" form of the keyoKey- the Object or "natural" form of the key- Returns:
- an Entry representing the specified key
-
toExternalUnits
protected static int toExternalUnits(long cUnits, int nFactor) Convert from an internal 64-bit unit value to an external 32-bit unit value using the configured units factor.- Parameters:
cUnits- an internal 64-bit units valuenFactor- the unit factor- Returns:
- an external 32-bit units value
-
toInternalUnits
protected static long toInternalUnits(int cUnits, int nFactor) Convert from an external 32-bit unit value to an internal 64-bit unit value using the configured units factor.- Parameters:
cUnits- an external 32-bit units valuenFactor- the unit factor- Returns:
- an internal 64-bit units value
-
encodeExpiry
protected long encodeExpiry(long cExpiryDelay) Encode the specified expiry delay (relative to current time) into the internal format. The value can bedecodedto yield an absolute date-time that is approximately equivalent to the the specified delay from the current time.- Parameters:
cExpiryDelay- the relative delay from the current time; must be >= 0- Returns:
- the encoded expiry value
-
decodeExpiry
protected long decodeExpiry(long cExpiryEncoded) Decode the specified encoded expiry value into an absolute time.- Parameters:
cExpiryEncoded- the encoded expiry value- Returns:
- the absolute expiry time
-
encodeTime
protected int encodeTime(long ldt) Encode the specified time into an opaque 32-bit value.- Parameters:
ldt- the time to encode- Returns:
- the encoded time
-
decodeTime
protected long decodeTime(int cEncoded) Decode the specified encoded time into an absolute ldt.- Parameters:
cEncoded- the 32-bit encoded time- Returns:
- the absolute date-time
-