首先了解一下Ehcache.
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
主要的特性有:
1. 快速
2. 简单
3. 多种缓存策略
4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
5. 缓存数据会在虚拟机重启的过程中写入磁盘
6. 可以通过RMI、可插入API等方式进行分布式缓存
7. 具有缓存和缓存管理器的侦听接口
8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
9. 提供Hibernate的缓存实现
详细了解还需要到Ehcache官网:http://www.ehcache.org/
第一案例:
CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder() /*1*/
.withCache("preConfigured",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(10)))/*2*/
.build(); /*3*/
cacheManager.init(); /*4*/
Cache<Long, String> preConfigured =
cacheManager.getCache("preConfigured", Long.class, String.class);/*5*/
Cache<Long, String> myCache = cacheManager.createCache("myCache", /*6*/
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(10)));
myCache.put(1L, "da one!"); /*7*/
String value = myCache.get(1L); /*8*/
System.out.println(value);
cacheManager.removeCache("preConfigured"); /*9*/
cacheManager.close(); /*10*/
1.静态方法org.ehcache.config.builders.CacheManagerBuilder.newCacheManagerBuilder返回一个新的org.ehcache.config.builders.CacheManagerBuilder实例。
2.使用构建器定义一个Cache别名为“preConfigured”。当cacheManager.build()实际CacheManager实例被调用时,将创建此缓存。第一个String参数是缓存别名,用于从中检索缓存CacheManager。第二个参数,org.ehcache.config.CacheConfiguration用于配置Cache。我们使用静态newCacheConfigurationBuilder()方法org.ehcache.config.builders.CacheConfigurationBuilder来创建默认配置。
3.最后,调用build()返回一个完全实例化但未初始化的,CacheManager我们可以使用。
4.在使用之前CacheManager,需要进行初始化,可以通过以下两种方式之一进行操作:CacheManager.init()在CacheManager实例上调用,或者调用CacheManagerBuilder.build(boolean init)布尔参数设置为true的方法。
5.通过将其别名,密钥类型和值类型传递给它来检索缓存CacheManager。例如,为了获得在步骤2中,你需要它的声明的缓存alias=”preConfigured”,keyType=Long.class和valueType=String.class。对于类型安全性,我们要求要传递的关键和价值类型,如果与我们预期的不同,那么在应用程序的生命周期CacheManager的ClassCastException早期就会出现。这样可以Cache防止被随机类型的污染。
6.该CacheManager可用于创建新的Cache按需实例。就像在步骤2中一样,它需要传递一个别名以及一个CacheConfiguration。实例化和完全初始化的Cache添加将通过CacheManager.getCacheAPI 返回和/或访问。
7.新添加的项目Cache现在可用于存储由键值对组成的条目。put方法的第一个参数是key,第二个参数是value。记住键和值类型必须与那些中定义的类型相同CacheConfiguration。此外,密钥必须是唯一的,并且仅与一个值相关联。
8.通过调用该cache.get(key)方法从缓存中检索一个值。它只需要一个参数,它是键,并返回与该键相关联的值。如果没有与该键相关联的值,则返回null。
9.我们可以CacheManager.removeCache(String)给定Cache。该CacheManager会不仅删除其参考 Cache,但也将其关闭。这些Cache版本全部在本地暂存资源(如内存)。对此的引用Cache变得不可用。
10.为了释放所有瞬时资源(内存,线程,…)a CacheManager提供给Cache它管理的实例,你必须调用CacheManager.close(),这反过来关闭Cache当时已知的所有实例。
您可以创建一个XML文件来配置CacheManager。
<config
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns='http://www.ehcache.org/v3'
xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd">
<cache alias="foo">
<key-type>java.lang.String</key-type>
<value-type>java.lang.String</value-type>
<resources>
<heap unit="entries">2000</heap>
<offheap unit="MB">500</offheap>
</resources>
</cache>
<cache-template name="myDefaults">
<key-type>java.lang.Long</key-type>
<value-type>java.lang.String</value-type>
<heap unit="entries">200</heap>
</cache-template>
<cache alias="bar" uses-template="myDefaults">
<key-type>java.lang.Number</key-type>
</cache>
<cache alias="simpleCache" uses-template="myDefaults" />
</config>