概述
詳細
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
http://www.springframework.org/schema/cache/spring-cache-4.1.xsd
具體配置如下:
啟用緩存注解功能
<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)
(六)運行起來
項目帶有DB腳步,在resource目錄下的table.sql文件。先建立DB,使用的是mysql數據庫5.6。
建立DB后,則需要配置連接db。
配置resource下的jdbc.properties文件。

然后運行該項目,如下圖示:

點擊紅色框住的超鏈接,可以看到不同的ehcache操作。
注:本文著作權歸作者,由demo大師發表,拒絕轉載,轉載需要作者授權
