天天看點

Ehcache的配置(自學,有問題請指出)

最近在看Ehcache,剛開始看的時候無從下手,晚上介紹的文章有很多,但是我們實際用到的很少,本次用緩存關鍵是加快速度,對于那些非即時傳回的資料的查詢和存儲進行緩存處理。本次是用于接口項目中,進行了監控和緩存。

ehcache緩存空間的建立主要是在spring配置中實作,配置檔案在晚上有很多

spring下的配置

<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:cache="http://www.springframework.org/schema/cache"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
	http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">
	
	<bean id="testServiceTarget" class="com.intime.test.TestServiceImpl"/> 
	
	<!-- 緩存注解聲明,使用注解緩存 -->
	<cache:annotation-driven cache-manager="cacheManager"></cache:annotation-driven>
	<!-- 指定ehcache.xml的位置 -->
	<bean id="cacheManagerFactory"
	class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
	p:configLocation="classpath:/ehcache.xml" />

	<!-- 聲明緩存Manager -->
	<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
	p:cacheManager-ref="cacheManagerFactory" />
</beans>
           

  這裡的緩存指定了ehcache.xml檔案的位置(路徑可自己定義):ehcache.xml的配置為

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
	<diskStore path="java.io.tmpdir" />
	<defaultCache maxElementsInMemory="50" eternal="false"
		timeToIdleSeconds="30" timeToLiveSeconds="120" overflowToDisk="true" />
	<cache name="interface" maxElementsInMemory="5000" eternal="true"
		timeToIdleSeconds="500" timeToLiveSeconds="500" overflowToDisk="true" />
</ehcache>
           

 其中這裡配置了一個名為"interface"的緩存空間,這個空間的作用為存儲臨時資料,之後會将這個檔案的資料存入資料庫,這樣做的原因是在監控接口時,不是将監控資料每次存入資料庫,而是一段時間去查詢一次緩存,将裡面的資料放到資料庫。是以這個緩存沒有自動清理的功能,而是要手動管理(eternal="true"),其餘的參數配置為:

        name:Cache的唯一辨別 
·           maxElementsInMemory:記憶體中最大緩存對象數。 
·           maxElementsOnDisk:磁盤中最大緩存對象數,若是0表示無窮大。 
·           eternal:Element是否永久有效,一但設定了,timeout将不起作用。 
·           overflowToDisk:配置此屬性,當記憶體中Element數量達到maxElementsInMemory時,Ehcache将會Element寫到磁盤中。 
·           timeToIdleSeconds:設定Element在失效前的允許閑置時間。僅當element不是永久有效時使用,可選屬性,預設值是0,也就是可閑置時間無窮大。 
·           timeToLiveSeconds:設定Element在失效前允許存活時間。最大時間介于建立時間和失效時間之間。僅當element不是永久有效時使用,預設是0.,也就是element存活時間無窮大。 
·           diskPersistent:是否緩存虛拟機重新開機期資料。 
·           diskExpiryThreadIntervalSeconds:磁盤失效線程運作時間間隔,預設是120秒。 
·           diskSpoolBufferSizeMB:這個參數設定DiskStore(磁盤緩存)的緩存區大小。預設是30MB。每個Cache都應該有自己的一個緩沖區。 
           

  在以後要用到緩存的時候随時能添加新的空間加以控制。  

  java類的寫法:這裡主要介紹存入緩存和取出緩存資料,本人在網上找了好久也沒找到一個完整的寫入寫出過程,一般寫入可以用注解或者調用cache的put方法,但是cache沒有get方法,這裡附上自己寫的一個類的兩個方法:

package ××××××××××××××××××;
import java.util.ArrayList;
import java.util.List;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
/**
 * 
 * <b>類名稱:</b>WriteCache.<br/>  
 * <b>類描述:</b><br/>  
 * <b>建立者:Zhoupz</b> <br/>
 * <b>建立時間:</b>2014-3-31 上午10:29:42<br/>  
 * <pre>
 * <b>修訂記錄:</b>
 * 版本	日期		修訂人		描述
 * -------------------------------------------------------------
 * 1.0	2014-3-31	Zhoupz  寫入緩存
 *
 * </pre>
 */
public class EhCache {
	/**
	 * 
	 * sqlCache:。<br/>  
	 * (存Cache)<br/>    
	 * @since  1.0  
	 * @param data
	 */
	public void setCache(String cacheName, String key, Object value) {
		CacheManager cacheManager = CacheManager.create();
		Cache cache = cacheManager.getCache(cacheName);
		Element element = new Element(key, value);
		cache.put(element);
	}
	/**
	 * 
	 * getCache:。<br/>  
	 * (取Cache)<br/>    
	 * @since  1.0
	 */
	public Object getCache(String cacheName,String key){
		CacheManager cacheManager = CacheManager.create();
		Cache cache = cacheManager.getCache(cacheName);
		List<String> list = cache.getKeys();
		Object object = null;
		for (int i = 0; i < list.size(); i++) {					//周遊緩存中所有資料
			String s = cache.get(list.get(i)).getKey().toString();
			if(s.equals(key)){
				object = cache.get(list.get(i)).getValue();
			}
		}
		return object;
	}
	/**
	 * 
	 * getCache:。<br/>  
	 * (調取緩存資料并清除調取資料---用于非自動清空的緩存)<br/>    
	 * @since  1.0  
	 * @param cacheNames
	 * @return
	 */
	public List<Object> getCache(String cacheName){
		List<Object> result = new ArrayList<Object>();
		CacheManager cacheManager = CacheManager.create();
		Cache cache = cacheManager.getCache(cacheName);
		List<String> list = cache.getKeys();
		for (int i = 0; i < list.size(); i++) {
			result.add(cache.get(list.get(i)).getValue());
			cache.remove(list.get(i));
		}
		return result;
	}
}
           

  之後要用到的方法都可以在裡面添加。暫時隻寫了部分。這個還要添加。

轉載于:https://www.cnblogs.com/derek1208/p/3638136.html