一看就会系列之ehcache入门

百度解释:Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

一、依赖包

pom.xml


	    net.sf.ehcache
	    ehcache
	    2.10.5

二、配置文件

ehcache.xml



    
    
    


    

    
    

    
        

    
    

注意:timeToIdleSeconds 和 timeToLiveSeconds,这两个参数设置的是10和20,等下针对它们进行测试。

 

applicationContext.xml,里面引入了ehcache.xml文件





	
  
      

      
          
      

      
          
      
  

三、实现代码

EhCacheTestService.java

package com.zhuyun.ehcache;

public interface EhCacheTestService {
	 public String getTimestamp(String param);
}

该接口很简单,根据一个参数,获取返回值。下面是实现类:

 

EhCacheTestServiceImpl.java

package com.zhuyun.ehcache;

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service("ehCacheTestService")
public class EhCacheTestServiceImpl implements EhCacheTestService {
	
	 @Cacheable(value="cacheTest",key="#param")
	 public String getTimestamp(String param) {
        Long timestamp = System.currentTimeMillis();
        return timestamp.toString();
    }
}

该类需要使用@Cacheable注释,value的值cacheTest即是ehcache.xml配置文件中设置的缓存策略。

 

四、测试类

EhCacheTestServiceTest.java

package com.zhuyun.ehcache;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class EhCacheTestServiceTest{
	
	public static void main(String[] args) {
	 try {
			 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
			 EhCacheTestService	ehCacheTestService = (EhCacheTestService) context.getBean("ehCacheTestService");
			 
			 //测试当缓存闲置10秒后销毁
		     System.out.println("第一次调用:" + ehCacheTestService.getTimestamp("param"));
		     Thread.sleep(2000);
		     System.out.println("2秒之后调用:" + ehCacheTestService.getTimestamp("param"));
		     Thread.sleep(11000);
		     System.out.println("再过11秒之后调用:" + ehCacheTestService.getTimestamp("param"));
		     System.out.println();
		     
		     //当缓存存活20秒后销毁
		     System.out.println("第一次调用另一个参数:" + ehCacheTestService.getTimestamp("param2"));
		     Thread.sleep(5000);
		     System.out.println("5秒后调用一次:" + ehCacheTestService.getTimestamp("param2"));
		     Thread.sleep(5000);
		     System.out.println("10秒后调用一次:" + ehCacheTestService.getTimestamp("param2"));
		     Thread.sleep(5000);
		     System.out.println("15秒后调用一次:" + ehCacheTestService.getTimestamp("param2"));
		     Thread.sleep(6000);
		     System.out.println("21秒后调用一次:" + ehCacheTestService.getTimestamp("param2"));
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

测试结果如下:

一看就会系列之ehcache入门_第1张图片

 

从ehcache.xml文件中,我们设置了timeToIdleSeconds="10",意思是当缓存闲置10秒后销毁 。上图中可以看出,在10秒内我们使用相同的参数调用时,返回的结果是相同的,所以结果是从缓存中直接拿出来的。

另外,我们也设置了timeToLiveSeconds="20",意思是当缓存存活20秒后销毁,即使缓存一直被使用,过了20秒一样会被销毁。从上图中也可以看出,虽然我们每过5秒调用一次,20秒之后,缓存依然不存在了。

 

 

 

你可能感兴趣的:(Java)