Ehcache入门

         EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。

官网:http://ehcache.org/

我下载的版本是2.6.6,通过maven下载的,官网有各个版本详细的文档,开发教程。

 

<dependency>
	<groupId>net.sf.ehcache</groupId>
	<artifactId>ehcache-core</artifactId>
	<version>2.6.6</version>
</dependency>

 在eclipse中构建maven工程EhcacheTest项目,加入如上依赖,

 

按照官网文档开始测试

 

CacheManager singletonManager = CacheManager.create();
singletonManager.addCache("testCache");
Cache cache = singletonManager.getCache("testCache");
Element element = new Element("key1", "value1");  
cache.put(element); 
Element e = cache.get("key1");
System.out.println(e.getObjectValue());

 运行这段代码发现报错:

 

 

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
value1

 上网找原因发现是slf4j和log4j冲突,解决办法,可以添加一个解决冲突的依赖:

 

 

<dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <version>1.6.1</version> 
</dependency>

 就不会报错了。

 

 

Ehcache使用CacheManager来管理Cache,Cache就是我们用来缓存数据的类。

下面先来说说CacheManager的几种创建方法:

根据官网文档显示,2.5之前的版本是允许相同名称的多个CacheManager存在同一个JVM中,所以,每次new CacheManager(...)会创建一个新的CacheManager,而不会关心是否已经有存在的CacheManager,这将会加大系统内存消耗,因为根本没必要,我们用来缓存数据的是Cache,而管理Cache的CacheManager不需要每次创建,new一个新的出来。

所以Ehcache在2.5之后中的版本中不再允许同名的多个CacheManager存在同一个JVM中,使用CacheManager.create()来返回一个已经存在的单例的CacheManager,如果没有,则创建一个单例的CacheManager。

创建单例的CacheManager,官方提供了四种方法:

1.

CacheManager.newInstance(Configuration configuration);

 根据配置创建一个新的CacheManager单例实例,或返回一个已经存的配置的实例。

 

2.

CacheManager.create();

 根据系统默认的配置,创建一个新的CacheManager单例实例,或返回一个已经存在的单例。此方法类似于

 CacheManager.getInstance();

 

3.

CacheManager.create(Configuration configuration);

  根据已经配好的配置创建一个新的CacheManager单例实例,或返回一个已经存的配置的实例。

 

4.

new CacheManager(Configuration configuration)

 创建一个新的CacheManager,如果同名的实例已经存在或配置参数为空,会抛出一个异常。

 

 

下面来使用CacheManager,Cache来测试缓存数据:

1.使用默认的CacheManager测试,即系统自带的配置ehcache.xml在官方jar包中,有个默认配置。

 

CacheManager singletonManager = CacheManager.create();
singletonManager.addCache("testCache");
Cache cache = singletonManager.getCache("testCache");
Element element = new Element("key1", "value1");  
cache.put(element); 
Element e = cache.get("key1");
System.out.println(e.getObjectValue());

 结果:value1

 

2.使用自定义的配置CacheManager测试,ehcache.xml配置文件如下:

 

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

<diskStore path="d:\ehcache"/>

<defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            maxElementsOnDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </defaultCache>
    
    <cache name="sampleCache1"
      maxElementsInMemory="1"
           maxElementsOnDisk="10000"
           eternal="false"
           overflowToDisk="true"
           diskSpoolBufferSizeMB="20"
           diskPersistent="true"
           timeToIdleSeconds="43200"
           timeToLiveSeconds="86400"
           memoryStoreEvictionPolicy="LFU"
        />
</ehcache>

 java代码:

 

 

CacheManager manager = CacheManager.create("src/main/java/ehcache.xml"); 
Cache cache = manager.getCache("sampleCache1");
Element element = new Element("key1", "value1");  
cache.put(element); 
Element e = cache.get("key1");
System.out.println(e.getObjectValue());

 结果:value1

 

 

3.Ehcache是一个进程式的缓存,用完可以关闭它:

 

manager.shutdown();

 

Ehcache还有很多其它方法,官网文档很详细,以后深入使用,比如与Srping集成等。

 

你可能感兴趣的:(ehcache)