Ehcache 3.0 Released with Revamped API and Off-Heap Storage
Terracotta has released version 3 of their distributed caching technology Ehcache, sporting a number of important new features. First, its API has been refactored and now leverages Java generics. Performance has generally been enhanced, and support for the
javax.cache API (JSR-107) and off heap storage capabilities have been added. Also, Ehcache 3.0 is fully compatible with Spring’s caching thanks to the
Developers can integrate the version of Ehcache into their Maven projects with the following coordinates:
<dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> <version>3.0.0</version> </dependency>
For Gradle users:
compile group: 'org.ehcache', name: 'ehcache', version: '3.0.0'
Ehcache’s Java API uses builders to provide a fluent means of configuration. You can interact with a
Cache via a
CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder() .withCache("myCache", CacheConfigurationBuilder.newCacheConfigurationBuilder( Long.class, String.class, ResourcePoolsBuilder.heap(10))) .build(true); Cache<Long, String> myCache = cacheManager.getCache("myCache", Long.class, String.class); myCache.put(1L, "First!"); String value = myCache.get(1L); cacheManager.removeCache("myCache"); cacheManager.close();
Ehcache also offers a new
UserManagedCache for creating caches that are not managed by a CacheManager, for example to allocate caches with a short lifecycle (see the configuration guide for more information.)
As with previous versions, Ehcache 3.0 provides storage tiers, making it possible to store frequently used data on faster-tiers and seldom-used data on slower ones.
Below is an example that shows how to configure resource pools for heap, off-heap and disk persistence. In this example, a path is provided for disk storage and three different resource pools are created. The first resource pool is sized to hold 10 entries. The second one is off-heap and will store up to 1MB. Finally, the disk resource pool is set to be 20MB.
PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder() .with(CacheManagerBuilder.persistence( getStoragePath() + File.separator + "myData")) .withCache("threeTieredCache", CacheConfigurationBuilder.newCacheConfigurationBuilder( Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .heap(10, EntryUnit.ENTRIES) .offheap(1, MemoryUnit.MB) .disk(20, MemoryUnit.MB) ) ).build(true);