ehcache2.8.3入门示例:hello world,以及在spring中运用ITeye - 乐橙lc8

ehcache2.8.3入门示例:hello world,以及在spring中运用ITeye

2019年03月20日10时17分48秒 | 作者: 怀蕊 | 标签: 时刻,过期,设置 | 浏览: 487

* Set the default parameters of this element - those from its enclosing cache. * @param tti TTI in seconds * @param ttl TTL in seconds * @param eternal code true /code if the element is eternal. protected void setLifespanDefaults(int tti, int ttl, boolean eternal) { if (eternal) { this.timeToIdle = 0; this.timeToLive = 0; } else if (isEternal()) { this.timeToIdle = Integer.MIN_VALUE; this.timeToLive = Integer.MIN_VALUE; } else { timeToIdle = tti; timeToLive = ttl; }

 

 

定论:

a) timeToIdleSeconds(闲暇时刻)、timeToLiveSeconds(生计时刻)都设置为0时,表明不过期

b) 假如只要timeToLiveSeconds设置 0的值,则Element的过期时刻为 timeToLiveSeconds

c) 假如只要timeToIdleSeconds设置 0的值,则Element的过期时刻为 (前次拜访时刻+timeToIdleSeconds),说得更浅显点,前次get过了,现在又想get,若二次get的时刻间隔 timeToIdleSeconds,则过期(即:终究一次get出来为null)

d) 假如timeToLiveSeconds、timeToIdleSeconds都有 0的值,则终究过期时刻为 b),c)规矩归纳起来,取二者的最小值


测验1:

@Test
 public void testTimeToIdleSeconds() throws InterruptedException {
 CacheManager manager = CacheManager.create();
 Cache myCache = new Cache("MyCache", 1, true, false, 0, 0); // Cache上设置为永不过期
 manager.addCache(myCache);
 String key = "A";
 System.out.println("-");
 Element elementPut = new Element(key, "Some Value", 2, 0); // timeToIdleSeconds为2秒
 myCache.put(elementPut);// 放入缓存
 System.out.println(myCache.get(key));// 取出显现
 Thread.sleep(1500);// 停1.5秒
 System.out.println(myCache.get(key));// 再次取出
 Thread.sleep(1500);// 停1.5秒
 System.out.println(myCache.get(key));// 尽管总时刻已达3秒,但刚刚被拜访过了,所以又能够再"活"2秒,依然有用
 Thread.sleep(2500);// 停2.5秒
 System.out.println(myCache.get(key));// 间隔前次拜访已过2.5s,现已 2s,过期
 }

 

输出成果

[ key = A, value=Some Value, version=1, hitCount=1, CreationTime = 1407898361782, LastAccessTime = 1407898361787 ]
[ key = A, value=Some Value, version=1, hitCount=2, CreationTime = 1407898361782, LastAccessTime = 1407898363287 ]
[ key = A, value=Some Value, version=1, hitCount=3, CreationTime = 1407898361782, LastAccessTime = 1407898364787 ]
null

 

测验2:

@Test
 public void testTimeToLiveSeconds() throws InterruptedException {
 CacheManager manager = CacheManager.create();
 Cache myCache = new Cache("MyCache", 1, true, false, 0, 0); // Cache上设置为永不过期
 manager.addCache(myCache);
 String key = "A";
 System.out.println("-");
 Element elementPut = new Element(key, "Some Value", 0, 2); // timeToLiveSeconds为2秒
 myCache.put(elementPut);// 放入缓存
 System.out.println(myCache.get(key));// 取出显现
 Thread.sleep(1500);// 停1.5秒
 System.out.println(myCache.get(key));// 再次取出(1.5s 2s,还"活"着)
 Thread.sleep(1500);// 停1.5秒
 System.out.println(myCache.get(key));// 总时刻已达3s, 2s,已过期)
 }

 

输出成果

[ key = A, value=Some Value, version=1, hitCount=1, CreationTime = 1407898423291, LastAccessTime = 1407898423296 ]
[ key = A, value=Some Value, version=1, hitCount=2, CreationTime = 1407898423291, LastAccessTime = 1407898424797 ]
null

 

测验3:

@Test
 public void testTimeToIdleSecondsAndTimeToLiveSeconds()
 throws InterruptedException {
 CacheManager manager = CacheManager.create();
 Cache myCache = new Cache("MyCache", 1, true, false, 0, 0); // Cache上设置为永不过期
 manager.addCache(myCache);
 String key = "A";
 System.out.println("-");
 Element elementPut = new Element(key, "Some Value", 2, 5); // timeToIdleSeconds为2秒,timeToLiveSeconds为3秒
 myCache.put(elementPut);// 放入缓存
 System.out.println(myCache.get(key));// 取出显现
 Thread.sleep(1600);// 停1.6秒
 System.out.println(myCache.get(key));// 再次取出(1.6s min(2 ,5),还"活"着)
 Thread.sleep(1600);// 停1.6秒
 System.out.println(myCache.get(key));// 总时刻已达3.2s, min((1.6+2) ,5),还"活"着)
 Thread.sleep(1600);// 停1.6秒
 System.out.println(myCache.get(key));// 总时刻已达4.8s, min((3.2+2) ,5),还"活"着)
 Thread.sleep(500);// 停0.5秒
 System.out.println(myCache.get(key));// 总时刻已达4.8+0.5=5.3s, min((4.8+2) ,5),过期)
 }

 

输出成果

[ key = A, value=Some Value, version=1, hitCount=1, CreationTime = 1407898480892, LastAccessTime = 1407898480897 ]
[ key = A, value=Some Value, version=1, hitCount=2, CreationTime = 1407898480892, LastAccessTime = 1407898482499 ]
[ key = A, value=Some Value, version=1, hitCount=3, CreationTime = 1407898480892, LastAccessTime = 1407898484099 ]
[ key = A, value=Some Value, version=1, hitCount=4, CreationTime = 1407898480892, LastAccessTime = 1407898485699 ]
null

关于这二个参数的设置,个人主张是:

a) 假如缓存的数据自身不存在更新(比方:一些简直历来不动的根底数据),只设置timeToIdleSeconds,这样的优点是,假如缓存项一向有人在拜访,就永久不会过期,反之,假如没人用,闲暇一段时刻后,会主动过期,开释资源

b) 假如缓存的数据自身存在定时的更新问题(比方:天气预报之类每隔几小时,db中会更新的数据),可一起设置二个参数,timeToLiveSeconds的值应该要小于db中的更新周期,这样db中的数据改变后,过一段时刻就会更新到缓存中

 

四、在spring中集成ehcache

1、需求增加的依靠

 dependency 
 groupId org.springframework /groupId 
 artifactId spring-context-support /artifactId 
 version 3.0.5.RELEASE /version 
 /dependency 

 2、在spring中的装备

 bean id="ehcacheCacheManager"
 property name="configLocation" 
 value classpath:ehcache.xml /value 
 /property 
 /bean 

 

 

出处:http://yjmyzz.cnblogs.com 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章