spring cache注意事项
Spring 注意事项 cache
2023-06-13 09:15:25 时间
文章目录[隐藏]
@Cacheable注解类内部调用失效问题
在使用Spring @Cacheable注解的时候,要注意,如果类A的方法f()被标注了@Cacheable注解,那么当类A的其他方法,例如:f2(),去直接调用f()的时候,@Cacheable是不起作用的,原因是@Cacheable是基于Spring AOP代理类,f2()属于内部方法,直接调用f()时,是不走代理的。举个例子:
@Cacheable(key = "#entityType", value = "entityCache")
public List<String> selectByEntityType(int entityType) {
List<String> result = new ArrayList<>();
// do something
return result;
}
public List<String> f2(){
// Cacheable失效,不会走缓存的
selectByEntityType(1);
}
解决方法就是不让这两个方法在同一个类中
@CacheEvict 清除多个key
借用@Caching实现
#入参是基本类型的:
@Caching(evict={@CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleId"),
@CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.ROLES_NAME + "'+#roleId"),
@CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleId")})
public ResponseData remove(@RequestParam Long roleId) {
………………
}
#入参是对象的:
@Caching(evict={@CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleDto.roleId"),
@CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.ROLES_NAME + "'+#roleDto.roleId"),
@CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleDto.roleId")})
public ResponseData edit(RoleDto roleDto) {
this.roleService.editRole(roleDto);
return SUCCESS_TIP;
}
相关文章
- Spring学习笔记(二十九)——SpringBoot Actuator指标监控
- 通过@MapperScan源码了解Spring自定义注解扫描器[通俗易懂]
- batch spring 重复执行_Spring Batch批处理
- Spring Cloud版本冲突(java.lang.NoClassDefFoundError:org/springframework/boot/Bootstrapper)
- 谈谈Spring bean的生命周期,作用域
- 解释spring框架中bean的生命周期_Spring bean的生命周期
- spring配置文件详解_jedis连接redis集群
- GraphQL实践2——Spring-GraphQL集成JPA与MySQL
- Spring(二)-生命周期 + 自动装配(xml) +自动装配(注解)
- spring boot 整合shiro 错误
- Spring-IOC
- 18个示例详解 Spring 事务传播机制
- 在生产环境中使用Spring Cloud Sleuth的注意事项(二)
- Spring Bean作用域
- spring的AOP(四)—-Spring AOP 编程(Advisor)详解编程语言
- spring的aop对service层切割日志和异常的处理详解编程语言
- Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例详解编程语言
- Spring Boot(十三):spring boot小技巧详解编程语言
- Spring Boot(五):spring data jpa的使用详解编程语言
- spring使用Spring整合Redis和Jedis构建高性能应用(redisjedis与)
- spring架构利器:JFinal MySQL Spring(jfinalmysql)