在高并发应用中缓存就是核心机制。最近在研究Ehcache,发现这是一个更加灵活易用的缓存框架(相对于Redis、Memcache),Ehcache更加小巧轻便。而且都有持久化机制,不用担心JVM和服务器重启的数据丢失。我用四个字来形容:拎包入住。
著名的Hibernate的默认缓存策略就是用Ehcache,Liferay的缓存也是依赖Ehcache,可见其健壮性。与其黑盒的瞎眼使用,不如来研究下这后边的机制。
Ehcache的架构
主要的特点:
- 缓存数据有三级:内存、堆外缓存Off-Heap、Disk缓存,因此无需担心容量问题。还可以通过RMI、可插入API等方式进行分布式缓存。
- 缓存数据会在虚拟机重启的过程中写入磁盘,持久化。
- 具有缓存和缓存管理器的侦听接口。
- 支持多缓存管理器实例,以及一个实例的多个缓存区域。
Maven写法:
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.3.0</version>
</dependency>
Gradle写法:
compile group: 'org.ehcache', name: 'ehcache', version: '3.3.0'
通用的读写使用CacheManager
import org.ehcache.Cache;
import org.ehcache.CacheManager;
import org.ehcache.UserManagedCache;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.CacheManagerBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.config.builders.UserManagedCacheBuilder;
public class Main {
public static void main(String[] args) {
CacheManager cacheManager
= CacheManagerBuilder.newCacheManagerBuilder()
.withCache("preConfigured",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(10)))
.build();
cacheManager.init();
Cache<Long, String> preConfigured =
cacheManager.getCache("preConfigured", Long.class, String.class);
Cache<Integer, String> myCache = cacheManager.createCache("myCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, String.class, ResourcePoolsBuilder.heap(10)).build());
for (int i=0;i<=20;i++){
//写
myCache.put(i, "@"+i);
//读
String value = myCache.get(i);