使用Spring提供的缓存抽象机制整合EHCache为项目提供二级缓存

Posted lamsey16

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Spring提供的缓存抽象机制整合EHCache为项目提供二级缓存相关的知识,希望对你有一定的参考价值。

 

Spring自身并没有实现缓存解决方案,但是对缓存管理功能提供了声明式的支持,能够与多种流行的缓存实现进行集成。

Spring Cache是作用在方法上的(不能理解为只注解在方法上),其核心思想是:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值存放在缓存中,等到下次利用同样的参数调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们的缓存的方法对于相同的方法参数要有相同的返回结果

 
1.适合和不适合保存到二级缓存的数据

①适合

[1]经常被查询,很少或几乎不修改的
[2]不是特别重要,允许出现偶尔的并发问题
[3]不会被其他应用程序修改的

②不适合

[1]经常被修改
[2]特别重要,不允许出现任何的并发问题,例如:财务数据
[3]有可能被其他应用程序修改
2.Survey项目中适合存入二级缓存的数据
①验证权限时查询的Res对象
Res getResByServletPath(String servletPath);
②参与调查相关方法
EngageService.PageInfo<Survey> getSurveyPage(Integer userId, boolean completed, Integer pageNum);
EngageService.Survey getSurveyDeeply(Integer surveyId);
3.使用Spring提供的缓存抽象机制整合EHCache
①用伪代码展示缓存切面的工作原理
try {
    //1.尝试从缓存中获取数据
    Object value = cacheMap.get(key);
    
    //2.判断value是否为null
    if(value == null){
        //3.实际执行目标方法
        value = 目标对象.目标方法();
        
        //4.将目标方法执行结果存入缓存
        cacheMap.put(key,value);
    }
    
    //5.返回value
    return value;
}catch(Exceptin e){
}
②Spring缓存抽象使用时的注意事项
[1]如果一个方法在输入相同的情况下输出不一定相同,那么不能使用该机制。
int count = userService.getRegistUserCount(boolean active);
[2]目标方法必须每一次都实际被调用,那么不能使用该机制使用了缓存抽象机制后目标方法理论上只会被执行一次
 

 Cache Abstraction

 

4.使用步骤
①创建键生成器类,实现org.springframework.cache.interceptor.KeyGenerator接口
需要在Spring配置文件中配置对应的bean
  
②引入EHCache环境
[1]加入jar包
[2]引入EHCache自身的配置文件,同时创建一个具名的缓存区域
③在Spring配置文件中配置缓存抽象对EHCache的整合
 
 

以上是关于使用Spring提供的缓存抽象机制整合EHCache为项目提供二级缓存的主要内容,如果未能解决你的问题,请参考以下文章

Spring整合Ehcache管理缓存

Spring整合Ehcache管理缓存

Spring整合Ehcache管理缓存

shiro简单配置(转)

shiro简单配置

史上最全的Spring Boot Cache使用与整合