首页 > 编程语言 > 详细

spring的ehcache缓存技术

时间:2020-01-26 17:41:46      阅读:83      评论:0      收藏:0      [点我收藏+]

首先要有一个搭建好的ssm框架,笔者使用的是基于maven搭建的ssm框架。

加入spring缓存:

1. 导入POM相关依赖包:如果maven项目无法下载ehcache的的相关jar包,需要自己手工导入,见文件中

     

技术分享图片
 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 
<!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 --> 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>
技术分享图片

注意:cache:annotation-driven/ 放在Spring MVC 的配置文件里,Controller里调用,缓存是生效的,Junit不生效。

放到Spring的配置文件里,Controller调用缓存是不生效的,Junit生效。

所以,如果Spring 和 Spring MVC的配置文件是分开的,最好把cache:annotation-driven/在两边都加上。

至于为什么,我还不清楚。

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

原作者地址:https://blog.csdn.net/weixin_41722928/article/details/80827430

spring的ehcache缓存技术

原文:https://www.cnblogs.com/xfke/p/12234468.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!