Ehcache简介 Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。 Ehcache最初是由Greg Luck于2003年开始开发。2009年,该项目被Terracotta购买。软件仍然是开源,但一些新的主要功能(例如,快速可重启性之间的一致性的)只能在商业产品中使用,例如Enterprise EHCache and BigMemory。维基媒体Foundationannounced目前使用的就是Ehcache技术。 Ehcache特点 快速 简单 多种缓存策略 缓存数据有两级:内存和磁盘,因此无需担心容量问题 缓存数据会在虚拟机重启的过程中写入磁盘 可以通过RMI、可插入API等方式进行分布式缓存 具有缓存和缓存管理器的侦听接口 支持多缓存管理器实例,以及一个实例的多个缓存区域 提供Hibernate的缓存实现 Ehcache简单例子: pom.xml <!--Ehcache 3,注意2.的版本和3.版本的区别挺大的--> <dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>javax.cache</groupId> <artifactId>cache-api</artifactId> <version>1.0.0</version> </dependency> 不使用配置文件 import org.ehcache.Cache; import org.ehcache.CacheManager; import org.ehcache.config.builders.CacheConfigurationBuilder; import org.ehcache.config.builders.CacheManagerBuilder; import org.ehcache.config.builders.ResourcePoolsBuilder; /** * Created by Blossom on 2018/9/25. */ public class NoXml { public static void main(String[] args){ //静态的org.ehcache.config.builders.CacheManagerBuilder.newCacheManagerBuilder方法, // 返回一个org.ehcache.config.builders.CacheManagerBuilder实例 CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder() .withCache("preConfigured", //使用构建起定义一个名为preConfigured的Cache // 该cache在执行cacheManager.build()之后被实际的CacheManager实例所创建 // 第一个String作为cache的别名。 // 第二个参数org.ehcache.config.CacheConfiguration,被用来配置Cache // 我们在org.ehcache.config.builders.CacheConfigurationBuilder中 // 使用静态的newCacheConfigurationBuilder()方法创建一个默认的配置文件 CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(100)) //最后调用build()返回一个完整的实例,但是该实例并未初始化,CacheManager我们就能够使用了。 .build()) //在使用CacheManager之前,我们先对其进行初始化。该初始化操作有一两种方式。 // 在CacheManager中采用CacheManager.init()进行初始化 // 或者是调用CacheManagerBuilder.build(boolean init)完成初始化操作,该参数是布尔型,设置为true。 .build(true); Cache<Long, String> preConfigured //通过别名,键类型,值类型我们可以在cacheManager中检索出一个Cache // 举例来说,要获得第2步中声明的缓存,您需要它的别名=“preConfigured”, // keyType=Long.class和valueType = String.class。 // 处于类型安全考虑,我们要求键和值类型都要传递。如果这些和我们期望的不同 // CacheManager将会抛出一个ClassCastException在应用程序生命周期的早期 // 这可以保护缓存免受随机类型的污染。 = cacheManager.getCache("preConfigured", Long.class, String.class); //CacheManager能够被用于创建需要的Cache实例,就像第2步一样,它需要像CacheConfiguration一样通过别名检索 // 这个实例和完全初始化的缓存将通过CacheManager.getCache()接口返回和/或访问。 Cache<Long, String> myCache = cacheManager.createCache("myCache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(100)).build()); //新添加的Cache能够通过键值对的形式被用于存储条目。put方法的第一个参数是键,第二个参数是值。 // 记住,键和值类型必须是与在cacheconfig容器中定义的类型相同的类型。 // 另外,键必须是惟一的,并且只与一个值相关联。 myCache.put(1L, "da one!"); //通过调用cache.get(key)方法,从缓存中检索值。它只需要一个参数,这个参数是键,然后返回与该键关联的值。 // 如果没有与该键相关联的值,则返回null。Cache将释放所有本地持有的临时资源(例如内存)。 // 对这个缓存的引用变得不可用。 String value = myCache.get(1L); System.out.println(value); //我们可以通过CacheManager.removeCache(String)移除一个给定的Cache, // CacheManager不仅会删除它对Cache的引用,而且还会关闭它。 cacheManager.removeCache("preConfigured"); //为了释放一个CacheManager提供的所有临时资源(内存、线程、…),您必须调用CacheManager.close(), // 它将关闭所有在当时已知的缓存实例。 cacheManager.close(); } } 使用配置文件: <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"> <!-- 1、声明一个名为foo的Cache--> <cache alias="foo"> <!--2、foo的键值对被声明为字符串类型,如果没有指明,默认是Object类型。--> <key-type>java.lang.String</key-type> <value-type>java.lang.String</value-type> <resources> <!--3、foo被声明在堆上保存多达2,000个条目。--> <heap unit="entries">2000</heap> <!--4、在它开始被驱逐之前,还有多达500 MB的外堆内存--> <offheap unit="MB">500</offheap> </resources> </cache> <!--5、<cache-template>可以让你创建一个抽象的<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> <!--6、bar是这样的cache,它使用名为myDefaults的<cache-template>,并将其主键覆盖到更广泛的类型--> <cache alias="bar" uses-template="myDefaults"> <key-type>java.lang.Number</key-type> </cache> <!--7、simpleCache是另一个cache,它使用myDefaults配置文件作为其唯一的CacheConfiguration--> <cache alias="simpleCache" uses-template="myDefaults" /> </config> import org.ehcache.Cache; import org.ehcache.CacheManager; import org.ehcache.config.Configuration; import org.ehcache.config.builders.CacheManagerBuilder; import org.ehcache.xml.XmlConfiguration; import org.junit.Test; import java.net.URL; /** * Created by Blossom on 2018/9/25. */ public class First { @Test public void testDefault() throws Exception{ URL url = getClass().getResource("/ehcache.xml"); //实例化一个XmlConfiguration,将XML文件URL传递给它 Configuration xmlConfig = new XmlConfiguration(url); //使用静态的org.ehcache.config.builders.CacheManagerBuilder.newCacheManager(org.ehcache.config.Configuration) //使用XmlConfiguration的Configuration创建你的CacheManager实例。 CacheManager myCacheManager = CacheManagerBuilder.newCacheManager(xmlConfig); myCacheManager.init(); Cache<String, String> foo = myCacheManager.getCache("foo",String.class,String.class); Cache<Number, String> bar = myCacheManager.getCache("bar",Number.class,String.class); Cache<Long, String> simpleCache = myCacheManager.getCache("simpleCache",Long.class,String.class); foo.put("1","zhangsan"); foo.put("2","lisi"); bar.put(1.1,"zhangsan"); bar.put(2.2,"lisi"); simpleCache.put(1L,"zhangsan"); simpleCache.put(2L,"lisi"); System.out.println(foo.get("1")); System.out.println(simpleCache.get(2L)); myCacheManager.close(); } }
ehcache-3.x
猜你喜欢
转载自blog.csdn.net/blossomfzq/article/details/82868451
今日推荐
周排行