首页 > 其他分享 >springMVC集成缓存框架Ehcache

springMVC集成缓存框架Ehcache

时间:2023-06-08 18:31:41浏览次数:49  
标签:Ehcache 缓存 springMVC 数据库 元素 jar 对象 key


概述


Ehcache算是当前比较流行的缓存框架,使用缓存可以极大的缓解服务器和数据库的压力,提高访问效率,提高服务器的并发能力。接下来我们看怎么把缓存在spring mvc种使用起来。


详细



Ehcache算是当前比较流行的缓存框架,使用缓存可以极大的缓解服务器和数据库的压力,提高访问效率,提高服务器的并发能力。接下来我们看怎么把缓存使用起来。

SpringMVC集成Ehcache所需的jar包:

包括ehcache-core-2.4.3.jar、ehcache-web-2.0.4.jar、guava-15.0.jar、slf4j-api-1.7.12.jar、commons-logging.jar


将jar包放到项目里之后,我们看怎么集成它。

先看看项目代码截图:

springMVC集成缓存框架Ehcache_缓存

(一)配置ehcahce.xml

updateCheck="false" 不检查更新当前使用的Ehcache的版本

eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。

maxElementsInMemory:缓存中允许创建的最大对象数

overflowToDisk:内存不足时,是否启用磁盘缓存。

timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,

两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,

如果该值是 0 就意味着元素可以停顿无穷长的时间。

timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,

这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。

memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。

1 FIFO,先进先出

2 LFU,最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。

3 LRU,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。


<?xml version="1.0"encoding="UTF-8"?>   
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false">   
<!—默认缓存--!>  
    <defaultCache eternal="false"    
        maxElementsInMemory="10000"   
        overflowToDisk="false"    
        timeToIdleSeconds="0"   
        timeToLiveSeconds="0"    
        memoryStoreEvictionPolicy="LFU"/>   
   <!—自定义缓存--!>  
    <cache name="myCache"    
        eternal="false"    
        maxElementsInMemory="10000"   
        overflowToDisk="false"    
        timeToIdleSeconds="0"   
        timeToLiveSeconds="0"    
        memoryStoreEvictionPolicy="LFU"/>   
</ehcache>



(二)配置spring-common文件

导入命名空间

xmlns:cache="http://www.springframework.org/schema/cache"

http://www.springframework.org/schema/cache

http://www.springframework.org/schema/cache/spring-cache-4.1.xsd

具体配置如下:

启用缓存注解功能



<cache:annotation-drivencache-manager="cacheManager"/>



缓存管理器工厂加载ehcache的配置



<bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
        <property name="configLocation"value="classpath:ehcache.xml"/> 
</bean>



声明缓存管理器



<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> 
        <property name="cacheManager"ref="cacheManagerFactory"/> 
</bean>



(三)使用@Cacheable注解来缓存数据

当缓存中没有该对象的时候,当然要从数据库里面访问了,从数据库查出来之后,缓存管理器会将此对象放到缓存中,下一次访问的时候,只要该对象没有消亡,则会从缓存里去取,不会再去查数据库

value为我们自定义缓存的name,key的属性是缓存的key

@Cacheable(value="myCache",key="#userName")   
@Override  
public List<Permission>findPermissionByName(String userName) {  
   System.out.println("查数据库了===========");  
   return permissionRepository.findPermissionByName(userName);

(四)使用@CachePut注解来更新缓存

当缓存中的对象被修改的时候,修改的方法使用该注解,缓存管理器会根据key找到被修改的对象,然后去修改缓存中的对象

@CachePut(value="myCache",key="#userId")//更新myCache 缓存   
@Override  
public void savePermission(Permissionpermission) {  
   permissionRepository.savePermission(permission);  
}

(五)使用@CacheEvict注解来清除缓存

当对象被删除的时候,我们需要去清除缓存里面存在的该对象,若不清除,数据库里已经删除,可是缓存里还在,查询的时候,该对象还是会查出来。

清除掉指定key的缓存

@CacheEvict(value="myCache",key="#userName")

清除掉全部缓存

@CacheEvict(value="myCache",allEntries=true)

(六)运行起来

项目带有DB脚步,在resource目录下的table.sql文件。先建立DB,使用的是mysql数据库5.6。

建立DB后,则需要配置连接db。

配置resource下的jdbc.properties文件。

springMVC集成缓存框架Ehcache_集成缓存框架_02


然后运行该项目,如下图示:

springMVC集成缓存框架Ehcache_springMVC_03

点击红色框住的超链接,可以看到不同的ehcache操作。



标签:Ehcache,缓存,springMVC,数据库,元素,jar,对象,key
From: https://blog.51cto.com/u_7583030/6442226

相关文章

  • SpringMVC执行流程关键代码
    org.springframework.web.servlet.DispatcherServletprotectedvoiddoDispatch(HttpServletRequestrequest,HttpServletResponseresponse)...{//processedRequest为org.apache.catalina.connector.RequestFacadeHttpServletRequestprocessedRequest=requ......
  • springmvc加文件上传支持
     找个sping.xml之类的,加入配置以及引用<beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> <dependency><groupId>commons-fileupload</groupId>......
  • 十二、缓存穿透、缓存击穿、缓存雪崩
    缓存穿透缓存穿透是指查询一个缓存和数据库中都不存在的数据,客户端不断发起请求,导致数据库压力过大解决方法1、采用布隆过滤器,将所有可能存在的数据,哈希到一个很大的bitmap中,一个一定不存在的数据会被bitmap拦截调,从而避免了对数据库的查询压力。2、如果查询的数据为空,直......
  • redis应用场景--缓存过期时间
    缓存可以有效的提高关键数据的获取速度,使得不必要每次查询数据库,避免了数据库被击穿。主动更新:需要知道这份数据的实效时间点,然后在那个时间点到来时重新更新数据,可能是查询数据库,也可能是访问第三接口,在获得数据之后,更新redis缓存。被动更新:程序每次都去redis获取数......
  • 基于springmvc+spring+mybatis+hibernate 封装的框架
    基于maven  freemarker2.3.20  spirngmvc3.2.9.RELEASE  spring3.2.9.RELEASE  Hiberante3.6.9.Final(自动建表)  mybatis3.2.7数据交互  druid连接池   cxf3.0.0发布webservice  quartz2.2.1定时任务  jquery   jquery-datata......
  • 【前端方案】-表格排序列LRU缓存方案(二)
    一.目标个人账号的设置记忆功能-避免用户每次登录之后重新对表单字段做展示设置二、存储方案轻量方案结合localstorage低容量存储(5M),根据LRU只存最近访问的20至30张表格列配置数据全量方案大内存G级别,使用indexedDb进行存储,有多少表格操作列数据就存多少,结合第三方库dexie.......
  • 配置和使用Ehcache
    一、介绍 网上有很多关于Ehcache的介绍,这里就不在多说了,只需要知道Ehcache是一个缓存框架。缓存嘛,就是数据存取比硬盘快,但是容量小的存储区域。当我们需要频繁使用某些数据时,我们可以将这些数据放到缓存中,下次取数据的时候,直接从缓存中取,这样可以节省不少时间。如果我们自......
  • 【深入浅出Spring原理及实战】「夯实基础系列」360全方位分析和探究SpringMVC的核心原
    SpringMVC简介SpringWebMVC是一种基于Java的轻量级Web框架,它实现了WebMVC设计模式,使用VC架构模式的思想将web层进行职责解耦。这种请求驱动类型的框架使用请求-响应模型,旨在简化Web开发过程。使用SpringWebMVC,我们可以更加高效地开发Web应用程序,而不必为了每个接口编写一个Ser......
  • SpringMVC参数接收与数据响应
    SpringMVC如何接受请求参数(普通类型参数/对象类型参数/数组/json数据等)1、普通类型参数(1)在可以在方法参数上使用@RequestParam注解来绑定请求参数,此注解允许指定请求参数的名称,以及是否是必须传的参数。@RequestMapping("/example")publicStringexampleMethod(@RequestPara......
  • 自定义缓存注解
    自定义Springboot缓存注解在使用redis缓存时,我们可能使用Jedis,RedisTemplate或者使用@Cacheable注解。尽管这些方法都能够实现缓存的功能,但是有时在真实的业务当中这些方法可能还不够简洁和灵活,于是我们可以自定义缓存注解来解决问题。SpringBoot中注解的格式......