BDF2默認使用的是ehcache實現的緩存功能,對于我們的應用來說,同樣可以使用BDF2提供的緩存功能來緩存需要業(yè)務數據,從而降低訪問數據頻率,減輕數據庫服務器壓力。要在業(yè)務當中使用BDF2中的緩存工具類,我們只需要獲取BDF2當中提供的ApplicationCache接口的實現類實例就行,因為這個接口默認配置在Spring當中,所以如果您的業(yè)務類也配置在Spring當中,那么只需要注入ApplicationCache接口實現類的bean即可,ApplicationCache接口實現類的bean id為“bdf2.applicationCache”;如果需要在一個非Springbean的業(yè)務類中獲取這個接口實現類的bean,可以通過下面的代碼實現:
ApplicationCache applicationCache=ContextHolder.getBean(ApplicationCache.BEAN_ID);
ApplicationCache接口源碼如下:
package com.bstek.bdf2.core.cache;
/**
* @author Jacky.gao
* @since 2013-5-21
*/
public interface ApplicationCache {
public static final String BEAN_ID = "bdf2.applicationCache";
/**
* 根據指定的key,從緩存當中獲取一個對象
* @param key 緩存當中對象的key值
* @return 返回緩存當中與給定key對應的對象值,如果對象不存在,就返回null
*/
Object getCacheObject(String key);
/**
* 從臨時緩存當中獲取一個被臨時緩存對象,<br>
* 默認情況下,位于臨時緩存中對象生命周期為1800秒,也就是半小時
* @param key 緩存當中對象的key值
* @return 返回緩存當中與給定key對應的對象值,如果對象不存在,就返回null
*/
Object getTemporaryCacheObject(String key);
/**
* 將一個對象放入緩存當中,同時如果緩存當中有存在相同key的對象,則進行覆蓋
* @param key 對象的key
* @param obj 具體對象
*/
void putCacheObject(String key, Object obj);
/**
* 將一個對象放入臨時緩存當中,同時如果緩存當中有存在相同key的對象,則進行覆蓋,<br>
* 默認情況下,位于臨時緩存中對象生命周期為1800秒,也就是半小時
* @param key 對象的key
* @param obj 具體對象
*/
void putTemporaryCacheObject(String key, Object obj);
/**
* 從緩存當中移除一個對象
* @param key 要移除的對象的key值
*/
void removeCacheObject(String key);
/**
* 從臨時緩存當中移除一個對象
* @param key 要移除的對象的key值
*/
void removeTemporaryCacheObject(String key);
}
接口方法都有注釋,且比較簡單,這里就不再進一步介紹了。在實際應用當中,如果我們采用BDF2做的項目需要部署到集群環(huán)境下,那么就需要我們項目當中采用的緩存能支持集群,對于BDF2當中的Ehcache來說,默認我們已經添加了對Ehcache Terracotta Server的支持(Terracotta是一款分布式緩存服務器,詳細信息點擊此處了解),我們需要做就是在WEB-INF\dorado-home\configure.properties文件當中添加名為bdf2.terracottaServer參數,指定Terracotta Server所在的IP即可(多個用逗號分隔),這樣就可以借助Terracotta Server,實現分布式緩存。
實際上,對于分布式緩存,除了使用Terracotta Server外,我們還可以使用Memcached,Memcached也是一款開源的分布式緩存服務器,具體點擊此處了解,聽說其功能很強大,有興趣的程序員可以試用一下。如果我們想實現Memcached來作為我們的分布式緩存服務器,那么也比較簡單,方法就是利用Memcached實現BDF2當中的ApplicationCache接口,并將其配置到Spring當中,并且配置時,Spring的beanid為“bdf2.applicationCache”,這樣就可以覆蓋BDF2提供的ApplicationCache接口的默認實現類了。
更多建議: