cache2k 1.4.0.Final - Andeman Sea
cache2k is a high performance and light weight in-process caching library. Compared to other libraries (EHCache, Guava and Caffeine) it achieves the highest throughput for cache hits while still providing one of the best eviction efficiency. Advanced features of cache2k, like refresh ahead and resilience can solve typical application problems with ease.
This change log lists the complete changes since the last stable version 1.2.4.Final.
New and Noteworthy
WeigherAsyncCacheLoader- Eviction listener and eviction improvements
- Synchronous execution of expiry listener
- Micrometer support
- Online resize of caches
- Support for GraalVM native image build
API Changes
New methods / fields:
CacheManager.STANDARD_DEFAULT_MANAGER_NAMECacheInfoMXBean.isWeigherPresent()CacheInfoMXBean.isLoaderPresent()CacheInfoMXBean.getTotalWeight()CacheInfoMXBean.getMaximumWeight()CacheInfoMXBean.getCapacityLimit()Cache.getStatistics()
New interface:
AsyncCacheLoader
Deprecation:
IntCache,LongCacheCache2kBuilder.buildIntCache(),Cache2kBuilder.buildLongCache()
API Changes and Potential breakages
Cache2kBuilder.addListener will execute an EntryExpiredLister synchronously. In version 1.2 an expiry listener was always executed asynchronously. This is an potentially incompatible change, in case expiry listeners are used. Review the existing client code and make sure that addAsyncListeners is used for an EntryExpiredLister if that is wanted.
Fixes
- Fix
CacheManager.setDefaultName, see GH#108 - race of refresh and delete: if an entry is deleted via
Cache.removeit was not reappearing when refreshed concurrently - fix missing expiry listener call after a created listener call, in case expiry during the insert
expiry,expireAfterWrite,refreshAhead: Fix race condition of aCache.putand the
Improvements
- Remove randomized hash seed and simplify the “rehashing” of hash codes identical to Java
HashMapandConcurrentHashMap - Async Cacheloader GH#93
CacheEntryEvictionListeneradded, GH#59- Expose cache statistics via
Cache.getStatistics() - Eviction: Efficiency improvements, see comment: https://github.com/cache2k/cache2k/issues/101#issuecomment-523003823
- Expiry listener supports synchronous operation
- Deprecated IntCache and LongCache
- Internal: Improvement and simplification of
ExceptionPropagatorhandling termination of the probation period after a refresh. Cache.invoke/EntryProcessor: Internal improvements when using listeners: avoid unnecessary entry reads- internal cleanup: use common code for refresh in different cache variants
- eviction efficiency fix for a few special short traces
- Support for new cache methods from Spring Framework 5.2
- doc clarifications and improvements
- SpringCache2kCacheManager.setAllowUnknownCache is true by default, to minimize initial setup
CacheEntry.toStringoutput does not calltoStringon the value and print hashCode instead- doc clarifications
- Code style improvements
Using this cache2k version
The binaries are available on maven central.
For Java SE/EE and Android environments
For Maven users:
<dependency>
<groupId>org.cache2k</groupId>
<artifactId>cache2k-base-pom</artifactId>
<version>1.4.0.Final</version>
<type>pom</type>
</dependency>
Recommended for Gradle users:
def cache2kVersion = '1.4.0.Final'
dependencies {
implementation "org.cache2k:cache2k-api:${cache2kVersion}"
runtimeOnly "org.cache2k:cache2k-core:${cache2kVersion}"
}
Note to Android users: The included jar files contain code that might only be needed in server environments (e.g. JMX support). It is possible to strip unnecessary code. Example ProGuard rules can be found at Andriod - cache2k User Guide
Using the JCache / JSR107 provider
Maven users include the cache2k JCache provider this way:
<dependency>
<groupId>org.cache2k</groupId>
<artifactId>cache2k-jcache</artifactId>
<version>1.4.0.Final</version>
<scope>runtime</scope>
</dependency>
For Gradle users:
dependencies {
runtimeOnly "org.cache2k:cache2k-jcache:1.4.0.Final"
}
Implementation details, tuning tips and hints on configuration can be found at: JCache - cache2k User Guide