Ehcache使用
这里只学习Ehcache3的用法,主要是cacheManager和cache两个重要的概念,一个是缓存管理器,一个是具体的缓存
官网:Ehcache官网
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<Long, String> myCache = cacheManager.createCache("myCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(10)));
myCache.put(1L, "da one!");
String value = myCache.get(1L);
cacheManager.removeCache("preConfigured");
cacheManager.close();
首先是创建缓存管理器cacheManager,这里可以使用with的方法配置很多东西,也可以直接创建cache,例如上边的例子创建了别名为preConfigured的cache项,key和value的类型也被指定了
注意cacheManager一定要初始化,初始化有两种方法,分别是
cacheManager.init();
CacheManagerBuilder.newCacheManagerBuilder().build(true)
使用getCache可以直接获取前边定义的cache项
Cache<Long, String> preConfigured =
cacheManager.getCache("preConfigured", Long.class, String.class);
当然你也可以再创建一个cache项,调用createCache方法:
Cache<Long, String> myCache = cacheManager.createCache("myCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(10)));
每个cache都可以配置存放缓存的位置(堆内、堆外、磁盘)
其他例子:
PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.withCache("threeTieredCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, String.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10, EntryUnit.ENTRIES) //堆
.offheap(1, MemoryUnit.MB) //堆外
.disk(20, MemoryUnit.GB) //磁盘
)
).build(true);
配置堆大小:
ResourcePoolsBuilder resourcePoolsBuilder = ResourcePoolsBuilder.newResourcePoolsBuilder()
// 堆内缓存大小
.heap(heapCacheSize, MemoryUnit.KB)
// 堆外缓存大小
.offheap(offHeapCacheSize, MemoryUnit.MB)
// 文件缓存大小
.disk(diskCacheSize, MemoryUnit.MB);
ResourcePoolsBuilder.newResourcePoolsBuilder().heap(10)什么意思?
答:heap表示使用堆内内存,10表示只能存放put10个对象,当put第11个那么前面10个对象将有一个会被移除。
补充:
heap堆内内存
off-heap堆外内存,将你的对象从堆中脱离出来序列化,然后存储在一大块内存中,这就像它存储到磁盘上一样,但它仍然在RAM中。