這裏舉例使用spring3.1.4 + ehcache java
註解的方式使用cache 是在spring3.1加入的web
使用方法:spring
<!-- ehcache依賴--> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.7.2</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.1.4.RELEASE</version> </dependency>
<!-- 這裏有註解類須要的jar -->
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.1.4.RELEASE</version> </dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>緩存
Ehcache的基本配置,具體參數意思看:http://www.ehcache.org/documentation/configuration/configurationmvc
name | cache的惟一標識spa |
maxElementsInMemory | 最大建立條數線程 |
eternal | 緩存是不是永久的,默認falsecode |
timeToLiveSeconds | 緩存的存活時間xml |
timeToIdleSeconds | 多長時間不訪問就清楚該緩存對象 |
overflowToDisk | 內存不足是否寫入磁盤,默認False |
maxElementsOnDisk | 持久化到硬盤最大條數 |
memoryStoreEvictionPolicy | 緩存滿了後,清除緩存的規則, 自帶三種:FIFO(先進先出),LFU(最少使用),LRU(最近最少使用) |
diskSpoolBufferSizeMB | 磁盤緩存的緩存區大小,默認30M |
diskExpiryThreadIntervalSeconds | 磁盤失效線程時間間隔 |
2.1 首先創建一個ehcache.xml的配置文件
<ehcache> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="false" maxElementsOnDisk="10000000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /> <cache name="onecache" maxElementsInMemory="10000" eternal="false" overflowToDisk="false" timeToIdleSeconds="10" timeToLiveSeconds="10"/> </ehcache>
2.2在spring的apllication.xml 加入注入的cache
<cache:annotation-driven cache-manager="cacheManager"/> <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="ehcache"/> <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:ehcache.xml" p:shared="true"/>
這裏還須要在配置文件頭部引入
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
...
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
"
在mvc-servlet.xml 里加入
<mvc:annotation-driven/> <!-- 挺重要的,不加註解不會被掃描-->
3.1 用於對象 class
@Cacheable(value = "onecache")
class A1{}
這種狀況類中方法中返回值都會被緩存,
3.2用於方法method
@Cacheable(value = "onecache", key = "#name",condition = "#age < 25") public xx findEmployeeBySurname(String firstName, String name, int age) { return xxx }
這個就會將age小於25的值,按name爲key緩存
3.3 清除
@CacheEvict(value="onecache",key="#name + 'haha'") public void delete(String name) { System.out.println("delete one name"); }
還可以使用下面的清除所有
@CacheEvict(value="oneCache",allEntries=true)
@Autowired private CacheManager cacheManager; //獲取當前時間 public String getABCCache() {
cacheManager.getCache("ccc").put("hello", new Date().toString()); return (String) cacheManager.getCache("ccc").get("hello").get(); }