Springcloud整合ehcache 3.5.2缓存

前言

公司项目调用feign接口查询用户权限等信息时,比较慢,打算加上ehcache缓存进行优化,网上整合2.x版本比较多,但公司要求使用3.x,最后查阅资料,完成任务,顺便整理一下!(个人认为3.x使用更简便一些)

引用jar包

<!-- cache -->
<dependency>
	<groupId>org.ehcache</groupId>
	<artifactId>ehcache</artifactId>
	<version>3.5.2</version>
</dependency>
<dependency>
	<groupId>javax.cache</groupId> 
	<artifactId>cache-api</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-cache</artifactId>
</dependency>

配置文件

ehcache配置

ehcache.xml 配置文件直接放在resources文件夹下面即可。
代码示例:

<eh:config
		xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
		xmlns:eh='http://www.ehcache.org/v3'
		xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.orgh/schema/ehcache-core-3.0.xsd">
		
	<!--指定缓存目录-->
	<eh:persistence directory="${java.io.tmpdir}/cache-data"/>

	<!--缓存模板-->
	<eh:cache-template name="default">
		<eh:expiry>
			<eh:ttl unit="seconds">600</eh:ttl>
		</eh:expiry>
		<eh:resources>
			<!--堆内内存可以放2000个条目,超出部分对外100M--> 
			<eh:heap unit="entries">2000</eh:heap>
			<eh:offheap unit="MB">100</eh:offheap>
		</eh:resources>
	</eh:cache-template>

	<!--实绩的缓存区间,继承了default缓存模板,configCache完全使用模板默认-->
	<eh:cache alias="configCache" uses-template= "default"/ >

	<!--下面继承了default缓存模板,但覆盖了缓存的过期时间--> 
	<eh:cache alias="authority_service" uses-template= "default">
		<eh:expiry>
			<eh:ttl unit= "minutes">10</eh:ttl>
		</eh:expiry>
		</eh:cache>
			<eh:cache alias="user_service" uses-template="default"> 
		<eh:expiry>
			<eh:ttl unit="minutes">10</eh:tt1>
		</eh:expiry>
	</eh:cache>
</eh:config>

application.yml

在Springboot配置文件中把ehcache.xml配置进去;即在application.yml中加入以下配置代码
代码示例:

spring:
	cache:
		ehcache:
			config: classpath:/ehcache.xml

启动类注解

启动类上一定要加上该注解,否则会抛出异常信息。
在启动类前加上@EnableCaching注解;这样的话,启动类启动时会去启动缓存启动器。

@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。
当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。

代码示例:

@EnableCaching //开启缓存
@SpringBootApplication
@EnableEurekaClient
@EnableScheduling
public class TestEhcacheApplication {
	public static void main(String[] args) {
		SpringApplication. run(TestEhcacheApplication.class,args);
	}
}

ehcache注解使用

常用注解
@Cacheable
@CachePut
@CacheEvict

代码示例:


//查询权限
@Cacheable(cacheNames = "autherity_service" ,key = "'authority_ '+#authority.id")
public List<Authority> queryAuthorityList(Authority authority) {
...
}
//删除权限
@Caching(evict = {
	@CacheEvict(cacheNames = "authority_service" ,key = "'#authority.uuid.toString()"),
	@CacheEvict(cacheNames = "user_service" ,key = "'authority_ '+#authority.id"),
	@CacheEvict(cacheNames = "authority_ role_ service" , allEntries = true)
})
public Integer deleteAuthority(Authority authority){
	...
}

//修改权限
@Caching(put = {
		@CachePut(cacheNames ="authority_ service" ,key="#authority.uuid.toString()"),
		@CachePut(cacheNames ="authority_ service" ,key ="'authority_' + #authority.id")
},
		evict = {
		@CacheEvict(cacheNames = "authority_ service" ,key ="'authority_ ' + #authority.name" )@CacheEvict(cacheNames = "authority_ role_ service" ,allEntries = true)
})
public Authority updateAuthority(Authority authority) {
	...
}

注意事项

被缓存的对象要序列化。
实现serializable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值