Springboot整合ehcache缓存

EhCache是一个比较成熟的Java缓存框架,最早从hibernate发展而来, 是进程中的缓存系统,它提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案,快速简单。

Springboot对ehcache的使用非常支持,所以在Springboot中只需做些配置就可使用,且使用方式也简易。

在你的项目上配置以下几步即可使用

首先,老规矩,pom.xml加依赖;

缓存支持启动器

orgspringframeworkbootgroupId

springbootstartercacheartifactId

dependency

坐标

netsfehcachegroupId

ehcacheartifactId

dependency

第二步,创建ehcache.xml配置文件

位置:classpath目录下,即src/main/resources/ehcache.xml

文件内容开发的时候可参考第一步导入的jar包,具体在哪呢,看下面:

再看代码:

ehcache xmlnsxsi xsinoNamespaceSchemaLocation

diskStore path

defaultCacheechcache的默认缓存策略

defaultCache

maxElementsInMemory

eternal

timeToIdleSeconds

timeToLiveSeconds

maxElementsOnDisk

diskExpiryThreadIntervalSeconds

memoryStoreEvictionPolicy

persistence strategy

defaultCache

cache name

maxElementsInMemory

eternal

timeToIdleSeconds

timeToLiveSeconds

maxElementsOnDisk

diskExpiryThreadIntervalSeconds

memoryStoreEvictionPolicy

persistence strategy

cache

ehcache

说明:

diskStore path这个是磁盘存储路径,当内存缓存满了的时候,就会往这里面放,javaiotmdir是操作系统缓存的临时目录,不同操作系统缓存目录不一样。

maxElementsInMemory 内存缓存中最多可以存放的元素数量,若放入Cache中的元素超过这个数值,则有以下两种情况

若overflowToDisktrue,则会将Cache中多出的元素放入磁盘文件中

若overflowToDiskfalse,则根据memoryStoreEvictionPolicy策略替换Cache中原有的元素

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

eternal 缓存中对象是否永久有效

timeToIdleSeconds 缓存数据在失效前的允许闲置时间单位秒,仅当eternal时使用默认值是表示可闲置时间无穷大若超过这个时间没有访问此中的某个元素那么此元素将被从中清除

timeToLiveSeconds 缓存数据的总的存活时间(单位:秒),仅当eternal时使用,从创建开始计时,失效结束。

maxElementsOnDisk 磁盘缓存中最多可以存放的元素数量表示无穷大

diskExpiryThreadIntervalSeconds 磁盘缓存的清理线程运行间隔,默认是120秒

memoryStoreEvictionPolicy 内存存储与释放策略,即达到maxElementsInMemory限制时,Ehcache会根据指定策略清理内存 共有三种策略,分别为LRU最近最少使用、LFU最常用的、FIFO先进先出

另外,defaultCache是默认缓存方式,cache是自定义的缓存方式,自行设置name

第三步,在Springboot配置文件中把ehcache.xml配置进去;即在application.properties中加入以下配置代码

springcacheehcacheconfigehcachexml

第三步结束,ehcache在Springboot中就配置完成了,下面就是怎么在Springboot中使用

第四步,在启动类前加上@EnableCaching注解;这样的话,启动类启动时会去启动缓存启动器。

app

args

app args

  第五步,实体类实现可序列化接口Serializable;由于需要实体类支持缓存中的磁盘存储,所以需要实体类实现可序列化接口

user

id

name

age

id

id

id id

name

name

name name

age

age

age age

第六步,使用@Cacheable把数据存进缓存,下面就是专门把方法返回值存入缓存

userServiceImpl userService

userMapper usermapper

value

user id

user userusermapperid

out

user

说明: @Cacheable可以标记在一个方法上,也可以标记在一个类上,当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。Spring在缓存方法的返回值时是以键值对进行缓存的,值就是方法的返回结果。

                 @Cacheable可以指定三个属性,value、key和condition。

                                  value属性指定cache的名称(即选择ehcache.xml中哪种缓存方式存储)

                                  key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL表达式。当我们没有指定该属性时,Spring将使用默认策略生成key。我们也直接使用“#参数名”或者“#p参数index”。下面是几个使用参数作为key的示例

 

value key

id

returnnull

value key

id

returnnull

value key

user

returnnull

value key

user

returnnull

   最后,使用@CacheEvict清除缓存;

valueallEntries

users

usersRepositoryusers

说明:@CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。@CacheEvict可以指定的属性有value、key、condition、allEntries和beforeInvocation。

                    其中value、key和condition的语义与@Cacheable对应的属性类似;allEntries是boolean类型,表示是否需要清除缓存中的所有元素。默认为false,表示不需要。

                   当指定了allEntries为true时,Spring Cache将忽略指定的key。有的时候我们需要Cache一下清除所有的元素,这比一个一个清除元素更有效率。

 

 

 

 

 

 

 

 

以上是 Springboot整合ehcache缓存 的全部内容, 来源链接: www.h5w3.com/php/706345.html

回到顶部