springmvc緩存和mybatis緩存


首先要有一個搭建好的ssm框架,筆者使用的是基於maven搭建的ssm框架。

加入springmvc緩存:

1. 導入相關依賴包:

 1 <dependency>
 2    <groupId>org.springframework</groupId>
 3    <artifactId>spring-context-support</artifactId>
 4    <version>4.3.7.RELEASE</version>
 5 </dependency>
 6 <dependency>
 7     <groupId>net.sf.ehcache</groupId>
 8     <artifactId>ehcache</artifactId>
 9     <version>1.6.2</version>
10 </dependency>

2. 加入ehcache的配置文件ehcache.xml:(注意文件的位置!)

 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 3     xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"  
 4     updateCheck="false">  
 5       
 6     <diskStore path="java.io.tmpdir" />  
 7       
 8     <defaultCache eternal="false"   
 9         maxElementsInMemory="1000"  
10         overflowToDisk="false"   
11         diskPersistent="false"   
12         timeToIdleSeconds="0"  
13         timeToLiveSeconds="600"   
14         memoryStoreEvictionPolicy="LFU" />  
15   
16     <cache name="myCache"   
17         eternal="false"   
18         maxElementsInMemory="500"  
19         overflowToDisk="false"   
20         diskPersistent="false"   
21         timeToIdleSeconds="0"  
22         timeToLiveSeconds="300"   
23         memoryStoreEvictionPolicy="LFU" />  
24   
25 </ehcache>

3. 在springmvc的配置文件中開啟緩存功能:(注意引入命名空間,不然會報錯!)

4. 開啟緩存注解

1 <!-- 啟用緩存注解功能 -->
2 <cache:annotation-driven cache-manager="cacheManager" />
3 <!-- spring提供的基於的ehcache實現的緩存管理器 -->
4 <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
5     <property name="configLocation" value="classpath:ehcache.xml" />
6 </bean>
7 <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
8     <property name="cacheManager" ref="cacheManagerFactory" />
9 </bean>

5. 將緩存注解寫在了service層:(控制層代碼省略,就是調用一下service層)

1 @Cacheable(value = "myCache", key = "'UserService.findById'")
2 @Override
3 public List<User> findById(int id) {
4     System.out.println("*************************************************我是緩存方法*************************************************");
5     List<User> list = userMapper.findById(id);
6     return list;
7 }

value對應的是ehcache.xml文件里的name,相當於一個緩存空間。key最好在全局是唯一的,這里使用的類名+方法名,因為后面可能會根據這個值對特定的緩存進行清理。

6. 測試:(jsp代碼省略,就是調用一下controller層,然后controller層調用上面加過緩存注解的service層方法)

第一次調用,進入該方法進行了相關程序:

第二次調用,沒有進入該方法,直接從緩存中輸出了結果:

在更新的時候,需要將該緩存清除掉:

1 @CacheEvict(value = "myCache", key = "'UserService.findById'")
2 @Override
3 public void removeCache() {
4     System.out.println("*************************************************移除了緩存*************************************************");
5 }

再次查詢的候就會重新進入該方法進行查詢。

加入MyBatis緩存:

mybatis的一級緩存是默認開啟的,二級緩存有一個最簡單的開啟方法,在每個Mapper.xml文件里加入一個<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" />即可(注意要放到mapper標簽里)

測試:(此處測試時先屏蔽掉了springmvc的緩存)

1 @Override
2 public List<User> findById(int id) {
3     System.out.println("*************************************************我是緩存方法*************************************************");
4     List<User> list = userMapper.findById(id);
5     return list;
6 }

第一次訪問,對數據庫進行了查詢:

第二次訪問,沒有對數據庫進行查詢,直接使用了緩存:

源碼下載:http://files.cnblogs.com/files/ImNemo/ssm-cache.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM