使用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的整合

时间: 2025-01-06 08:57:23

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

Hibernate Cache :使用Ehcache作为Hibernate的二级缓存的配置说明

Ehcache介绍 Ehcache是一个快速的.轻量级Java应用缓存.Hibernate中就支持了Ehcache. http://ehcache.org/documentation/integrations/hibernate Hibernate与Ehcache集成 要完成Hibernate与Ehcache的集成,只需要按照下面几步操作即可完成. 1.下载Ehcache-core 包 可以在浏览器上输入网址:http://sourceforge.net/projects/ehcache/fil

Mybatis(五) 延迟加载和缓存机制(一级二级缓存)

踏踏实实踏踏实实,开开心心,开心是一天不开心也是一天,路漫漫其修远兮. --WH 一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的数据的话,就不查询从表的信息.所以这就是突出了懒这个特点.真是懒啊. Mybatis中resultMap可以实现延迟加载 1.1.查询订单信息,延迟加载用户信息,一对一关系. 1.1.1.开启延迟加载 全局配置文件中,settings标签用来设置全局常量的,这里就用到了. 1 <settings>

Mybatis缓存处理机制

一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空. 2. 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如

hibernate回顾之缓存机制-一级缓存、二级缓存、查询缓存

在介绍hibernate的缓存机制前,我们先了解一下什么是缓存: 缓存(Cache): 计算机领域非常通用的概念.里面放东西,说白了缓存就是一个集合.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能.缓存中的数据是数据存储源中数据的拷贝并且缓存的物理介质通常是内存. 了解jdbc的人都知道,当需要连接数据库时,一般都会做一个连接池,那么连接池和缓存有什么区别呢? 相同点:两者都可以是在内存里,实现时一样的

Android深度系列—分析Android-Universal-Image-Loader的缓存处理机制

讲到缓存,平时流水线上的码农一定觉得这是一个高大上的东西.看过网上各种讲缓存原理的文章,总感觉那些文章讲的就是玩具,能用吗?这次我将带你一起看过UIL这个国内外大牛都追捧的图片缓存类库的缓存处理机制.看了UIL中的缓存实现,才发现其实这个东西不难,没有太多的进程调度,没有各种内存读取控制机制.没有各种异常处理.反正UIL中不单代码写的简单,连处理都简单.但是这个类库这么好用,又有这么多人用,那么非常有必要看看他是怎么实现的.先了解UIL中缓存流程的原理图. 原理示意图 主体有三个,分别是UI,缓

浅谈Hibernate缓存机制:一级缓存、二级缓存

一:什么是缓存机制 当我们频繁访问数据库时,尤其像Hibernate持久层框架,会导致数据库访问性能降低,因此我们期望有一种机制能提供一个"缓存空间",我们将需要的数据复制到这个"缓存空间",当数据查询时,我们先在这个"缓存空间"里找,如果没有,我们再去数据库查找,这样就减少了与数据库的访问,从而提高了数据库访问性能,这就是缓存机制. 二:Hibernate缓存机制 1:一级缓存:Hibernate默认的缓存机制,它属于Session级别的缓存机

Hibernate的一级二级缓存机制配置与测试

特别感谢http://www.cnblogs.com/xiaoluo501395377/p/3377604.html 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题. 随笔虽长,但我相信看完的朋友绝对能对hibernate的 N+1问题以及缓存有更深的了解. 一.N+1问题 首先我们来探讨一下N+1的问题,我们先通过一个例子来看一下,什么是N+1问题: list(

Hibernate的二级缓存使用(spring使用)

(一)Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象. 2) 把获得的所有数据对象根据ID放入到第二级缓存中. 3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查:查不到,如果配置了二级缓存,那么从二级缓存中查:查不到,再查询数据库,把结果按照ID放入到缓存. 4) 删除.更新.增加数据的时

SSH整合配置二级缓存

一.了解 Hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但session关闭时,一级缓存失效. 二级缓存是SessionFactory级别的全局缓存,它底下可以使用不同的缓存类库,比如ehcache.oscache等 对缓存若想进步了解可参考以下网址http://www.360doc.com/content/10/0917/17/2560742_54412898.shtml 二.配置 1.在applicationC