springboot+ehcache使用方法:
1.在src/main/resource里面配置ehcache.xml
2.在配置文件application.properties里引入echcache.xml
spring.cache.ehcache.config=classpath:ehcache.xml
3.在springboot启动类里加上ehcache注解
4.在controller层里直接调用的service层方法上加入ehcache注解,实体类必须实现
implements Serializable 序列化
@CacheEvict必须作用在走代理的方法上,controller层直接调用service层的方法,不能在方法调用的方法上加入注解,否则注解无效
1.使用@Cacheable把数据存进缓存,下面就是专门把方法返回值存入缓存
@Service
@Transactional
//事务,表示该类下所有的都受事务控制
public
class
userServiceImpl
implements
userService {
@Autowired
private
userMapper usermapper;
@Override
@Cacheable
(value=
"users"
)
public
user selectUserById(
int
id) {
user user=
this
.usermapper.selectUserById(id);
System.out.println(
"1111111111111111111111111"
);
return
user;
}
}
说明:1》@Cacheable可以标记在一个方法上,也可以标记在一个类上,当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。Spring在缓存方法的返回值时是以键值对进行缓存的,值就是方法的返回结果。
2》@Cacheable可以指定三个属性,value、key和condition。 value属性指定cache的名称(即选择ehcache.xml中哪种缓存方式存储)key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL表达式。当我们没有指定该属性时,Spring将使用默认策略生成key。我们也直接使用“#参数名”或者“#p参数index”。下面是几个使用参数作为key的示例
@Cacheable
(value=
"users"
, key=
"#id"
)
public
User find(Integer id) {
return null;
}
@Cacheable
(value=
"users"
, key=
"#p0"
)
public
User find(Integer id) {
retur nnull;
}
@Cacheable
(value=
"users"
, key=
"#user.id"
)
public
User find(User user) {
retur nnull;
}
@Cacheable
(value=
"users"
, key=
"#p0.id"
)
public
User find(User user) {
returnnull;
}
3》最后,使用@CacheEvict清除缓存;
@CacheEvict
(value=
"users"
,allEntries=
true
)
public
void
saveUsers(Users users) {
this
.usersRepository.save(users);
}
说明:@CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。@CacheEvict可以指定的属性有value、key、condition、allEntries和beforeInvocation。 其中value、key和condition的语义与@Cacheable对应的属性类似;allEntries是boolean类型,表示是否需要清除缓存中的所有元素。默认为false,表示不需要。当指定了allEntries为true时,Spring Cache将忽略指定的key。有的时候我们需要Cache一下清除所有的元素,这比一个一个清除元素更有效率。
@CachePut 的作用 主要针对方法配置,如果缓存需要更新,且不干扰方法的执行,可以使用注解@CachePut。@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
@CachePut(cacheNames="book", key="#isbn")
public Book updateBook(ISBN isbn, BookDescriptor descriptor)
清除操作默认是在对应方法成功执行之后触发的,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。使用beforeInvocation可以改变触发清除操作的时间,当我们指定该属性值为true时,Spring会在调用该方法之前清除缓存中的指定元素
@CacheEvict(cacheNames="books", beforeInvocation=true)
public void loadBooks(InputStream batch)
说明:
@Cacheable,@CachePut , @CacheEvict都有value属性,指定的是要使用缓存名称;key属性指定的是数据在缓存中的存储的键。@Cacheable(“something");这个相当于save()操作,@cachePut相当于Update()操作,只要他标示的方法被调用,那么都会缓存起来,而@Cacheable则是先看下有没已经缓存了,然后再选择是否执行方法。@CacheEvict相当于Delete()操作。用来清除缓存用的。