ehcache缓存过期时间和注解的使用。
2018-03-27 21:59
357 查看
一、过期时间:
详细配置说明请自行网上搜索。timeToIdleSeconds表示最大空闲的时间,timeToLiveSeconds表示最大存活时间,(当为0时表示可以无限闲置或存活?此句好像存在疑问,特此来验证一下)
例子1:结果:5秒间隔内不过期,超过10秒一定过期,就不测试了,占用篇幅!备注:缓存的过期是访问后才过期!
<cache name="cacheTest1"
maxElementsInMemory="1000"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="5"
timeToLiveSeconds="10"/> 例子2: 最大闲置5秒,最大存活0。结论:当存活时间不设置(0默认),只要闲置时间内访问,可以无限存活。
<cache name="cacheTest2"
maxElementsInMemory="1000"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="5"
timeToLiveSeconds="0"/>
/** * 时间的测试2 * unless="#result!=null; 表示返回null的值不缓存 */ @Cacheable(value="cacheTest2",key="#param",unless="#result==null") public String getTime2(String param) { Long time = System.currentTimeMillis(); return time.toString(); } /**时间2的清除*/ @CacheEvict(value="cacheTest2",key="#param") public void clearTime2(String param){ }测试结果: /**
* 2.ehcache配置,闲置5秒,存活0秒
*/
@Test
public void test2() throws InterruptedException{
MyEhcacheAutoService bean = context.getBean(MyEhcacheAutoService.class);
String time3 = bean.getTime2("shijian");
System.out.println(time3);
Thread.sleep(4000);
String time4 = bean.getTime2("shijian");
System.out.println(time4);//4秒时间,缓存不变
Thread.sleep(4000);
String time5 = bean.getTime2("shijian");
System.out.println(time5);//4+4秒时间,缓存不变
Thread.sleep(4000);
bean.clearTime2("shijian");
String time6 = bean.getTime2("shijian");
System.out.println(time6);//4+4+4秒时间,如果不清除缓存不变,但是被清除了,会变
} 例子3:我们知道当设置了存活时间,存活时间到了一定过期,那么假如把闲置时间设置0呢?<cache name="cacheTest22" maxElementsInMemory="1000" eternal="false"
overflowToDisk="false" timeToIdleSeconds="0" timeToLiveSeconds="5" />
/** * 2.ehcache配置,闲置时间0秒,存活5秒 */ @Test public void test22() throws InterruptedException{ MyEhcacheAutoService bean = context.getBean(MyEhcacheAutoService.class); String time1 = bean.getTime22("shijian"); System.out.println(time1); Thread.sleep(4000); String time2 = bean.getTime22("shijian"); //不变 System.out.println(time2); Thread.sleep(4000); String time3 = bean.getTime22("shijian"); //变 System.out.println(time3); }结论:1、2个时间都不为0,那么只要到过期时间必定过期,否则看是否[b]闲置时间内。[/b]
2、如果存活时间为0,代表永久存活。即只要看在[b]闲置时间间隔内访问即可。[/b]
3、如果[b]闲置时间为0,可以想成代表永久活跃,基本就没意义了,只要看存活时间到期即可。
[/b]
4、2个参数,一个为0,只看另外一个。2个都不为0,2个条件都要满足!【只看此条】
二、上面用了几个注解,说明下,以及缓存key的规则。
@Cacheable(value="cacheTest1",key="#param") //请求后会缓存,查询用,value是配置的cache名,key就表示key@CacheEvict(value="cacheTest2",key="#param") //请求后会删除。删除用!
@CachePut(value="cacheTest3",unless="#result==null")//请求后方法肯定执行,并且存缓存,更新用! unless除了结果不等于空。(#result 代表返回结果)
问题1、那么不设置key,默认的key是什么? 答案:是一个空数组
@Test
public void test0(){
MyEhcacheAutoService bean = context.getBean(MyEhcacheAutoService.class);
bean.getTime0();
List<Element> all = EhcacheUtil.getAll("cacheTest0");//备注:此Util是用API操作,它可以和注解互通。
for (int i = 0; i < all.size(); i++) {
Object objectKey = all.get(i).getObjectKey();
System.out.println(objectKey); //SimpleKey []
}
}问题2、key有那些
我举几个常用的:#xxx,xxx是方法参数名,可以拿到xxx的参数做为key,并且可以#user.id的形式!
#root.target 实例对象
#root.methodName 方法名称
问题3、我想拼接几个参数怎么办? 比如把参数1和参数2拼接起来。直接用 + 即可拼串
/**
* 时间的测试3
*/
@Cacheable(value="cacheTest3",key="#param1+#param2",unless="#result==null")
public String getTime3(String param1,String param2) {
Long time = System.currentTimeMillis();
return time.toString();
} ---------------备注:一个参数做key不能为空。但是拼接时,只要有1个不为空即可做为key。
相关文章推荐
- 缓存策略交互 — 最长使用期限和最长过期时间
- EhCache 缓存 使用注解与Spring整合
- Spirng3基于注解(annotation)整合ehcache 使用页面缓存、对象缓存
- Spirng3基于注解(annotation)整合ehcache 使用页面缓存、对象缓存
- Spring Boot中的缓存支持(一)注解配置与EhCache使用
- redis使用工具类进行保存数据和Ehcache注解缓存类实现缓存value
- Spring Boot中的缓存支持(一)注解配置与EhCache使用
- Spring与ehcache整合,通过Spring原生注解使用缓存
- IIS使用十大原则,(IIS过期时间,IIS缓存设置) 【转载】
- Spring与ehcache整合,通过Spring原生注解使用缓存
- IIS使用十大原则,(IIS过期时间,IIS缓存设置) 【转载】
- Spring Boot中的缓存支持(一)注解配置与EhCache使用
- 基于注解形式的hibernate二级缓存的使用(ehcache)
- IIS使用十大原则,(IIS过期时间,IIS缓存设置)
- IIS使用十大原则,(IIS过期时间,IIS缓存设置) 【转载】
- IIS使用十大原则,(IIS过期时间,IIS缓存设置) 【转载】
- Ehcache——基于注解的缓存使用
- IIS使用十大原则,(IIS过期时间,IIS缓存设置) 【转载】
- 使用Retrofit和Okhttp实现网络缓存。无网读缓存,有网根据过期时间重新请求
- redis+spring注解方式实现配置缓存时间过期