1. 程式人生 > >springMVC整合快取框架Ehcache

springMVC整合快取框架Ehcache

Ehcache算是當前比較流行的快取框架,使用快取可以極大的緩解伺服器和資料庫的壓力,提高訪問效率,提高伺服器的併發能力。接下來我們看怎麼把快取使用起來。

SpringMVC整合Ehcache所需的jar包:

包括ehcache-core-2.4.3.jar、ehcache-web-2.0.4.jar、guava-15.0.jar、slf4j-api-1.7.12.jar、commons-logging.jar

jar包下載地址http://download.csdn.net/detail/qq_33556185/9550460

將jar包放到專案裡之後,我們看怎麼整合它

(一)配置ehcahce.xml  

updateCheck="false" 不檢查更新當前使用的Ehcache的版本

    eternal:快取中物件是否為永久的,如果是,超時設定將被忽略,物件從不過期。

    maxElementsInMemory:快取中允許建立的最大物件數

    overflowToDisk:記憶體不足時,是否啟用磁碟快取。

    timeToIdleSeconds:快取資料的鈍化時間,也就是在一個元素消亡之前,

     兩次訪問時間的最大時間間隔值,這隻能在元素不是永久駐留時有效,

     如果該值是 0 就意味著元素可以停頓無窮長的時間。

    timeToLiveSeconds:快取資料的生存時間,也就是一個元素從構建到消亡的最大時間間隔值,

     這隻能在元素不是永久駐留時有效,如果該值是0就意味著元素可以停頓無窮長的時間。

    memoryStoreEvictionPolicy:快取滿了之後的淘汰演算法。

    1 FIFO,先進先出

    2 LFU,最少被使用,快取的元素有一個hit屬性,hit值最小的將會被清出快取。

    3 LRU,最近最少使用的,快取的元素有一個時間戳,當快取容量滿了,而又需要騰出地方來快取新的元素的時候,那麼現有快取元素中時間戳離當前時間最遠的元素將被清出快取。

<?xml version="1.0"encoding="UTF-8"?> 
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false"> 
<!—預設快取--!>
    <defaultCache eternal="false"  
        maxElementsInMemory="10000" 
        overflowToDisk="false"  
        timeToIdleSeconds="0" 
        timeToLiveSeconds="0"  
        memoryStoreEvictionPolicy="LFU"/> 
   <!—自定義快取--!>
    <cache name="myCache"  
        eternal="false"  
        maxElementsInMemory="10000" 
        overflowToDisk="false"  
        timeToIdleSeconds="0" 
        timeToLiveSeconds="0"  
        memoryStoreEvictionPolicy="LFU"/> 
</ehcache>

(二)配置spring-common檔案

匯入名稱空間

xmlns:cache="http://www.springframework.org/schema/cache"

http://www.springframework.org/schema/cache

具體配置如下:

啟用快取註解功能

<cache:annotation-drivencache-manager="cacheManager"/>   

快取管理器工廠載入ehcache的配置

   <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 

        <property name="configLocation"value="classpath:ehcache.xml"/> 

</bean> 

宣告快取管理器

    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> 

        <property name="cacheManager"ref="cacheManagerFactory"/> 

</bean>

到此環境已經搭建完成了。

接下來我們看怎麼使用

(三)使用@Cacheable註解來快取資料

當快取中沒有該物件的時候,當然要從資料庫裡面訪問了,從資料庫查出來之後,快取管理器會將此物件放到快取中,下一次訪問的時候,只要該物件沒有消亡,則會從快取裡去取,不會再去查資料庫

value為我們自定義快取的name,key的屬性是快取的key

    @Cacheable(value="myCache",key="#userName") 
    @Override
    public List<Permission>findPermissionByName(String userName) {
       System.out.println("查資料庫了===========");
       return permissionRepository.findPermissionByName(userName);
   }

(四)使用@CachePut註解來更新快取

當快取中的物件被修改的時候,修改的方法使用該註解,快取管理器會根據key找到被修改的物件,然後去修改快取中的物件

    @CachePut(value="myCache",key="#userId")//更新myCache 快取 
    @Override
    public void savePermission(Permissionpermission) {
       permissionRepository.savePermission(permission);
    }

(五)使用@CacheEvict註解來清除快取

當物件被刪除的時候,我們需要去清除快取裡面存在的該物件,若不清除,資料庫裡已經刪除,可是快取裡還在,查詢的時候,該物件還是會查出來。

清除掉指定key的快取  

@CacheEvict(value="myCache",key="#userName")  

清除掉全部快取  

@CacheEvict(value="myCache",allEntries=true)