企业门户网站建设信息,河北手机网站制作企业,20条优化措施,建设一个网站最低消费Spring Cache 文章目录 Spring Cache1、Spring Cache介绍2、Spring Cache常用注解2.1、EnableCaching注解2.2、CachePut注解2.3、CacheEvict注解2.4、Cacheable注解 3、Spring Cache使用方式--redis 1、Spring Cache介绍
Spring Cache是一个框架#xff0c;实现了基于注解的缓…Spring Cache 文章目录 Spring Cache1、Spring Cache介绍2、Spring Cache常用注解2.1、EnableCaching注解2.2、CachePut注解2.3、CacheEvict注解2.4、Cacheable注解 3、Spring Cache使用方式--redis 1、Spring Cache介绍
Spring Cache是一个框架实现了基于注解的缓存功能只需要简单地加一个注解就能实现缓存功能.Spring Cache提供了一层抽象底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口。
针对不同的缓存技术需要实现不同的CacheManager:
CacheManager描述EhCacheCacHManager使用EhCache作为缓存技术GuavaCacheManager使用Google的GuavaCache作为缓存技术RedisCacheManager使用Redis作为缓存技术
2、Spring Cache常用注解
注解说明EnableCaching开启缓存注解功能Cacheable在方法执行前spring先查看缓存中是否有数据如果有数据则直接返回缓存数据;若没有数据调用方法并将方法返回值放到缓存中CachePut将方法的返回值放到缓存中cacheEvict将一条或多条数据从缓存中删除
在spring boot项目中使用缓存技术只需在项目中导入相关缓存技术的依赖包并在启动类上使用EnableCaching开启缓存支持即可。
例如使用Redis作为缓存技术只需要导入Spring data Redis的maven坐标即可。 我们在使用简单的缓存技术的时候不用单独映入相应的依赖使用spring-boot-starter-web这个包即可但是要使用redis作为缓存就需要额外的引入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId/dependency2.1、EnableCaching注解
在启动类上加上注解EnableCaching
2.2、CachePut注解
Autowired
private CacheManager cacheManager;Autowired
private UserService userService;/*** CachePut:将方法的返回值放入缓存* value缓存名称 每个缓存可以有多个key* key缓存的key #result.id:动态生成keyName进行缓存***/
CachePut(value userCache,key#result.id)
// CachePut(value userCache,key#user.name) //将user-name作为缓存名
// CachePut(value userCache,key#user.id) //将user-id作为缓存名
PostMapping
public User save(User user){userService.save(user);return user;
}key值参数引用SpEL动态获取的说明 该注解在没有缓存配置如redis的时候会将数据缓存在ConcurrentMap里面但是此缓存操作不具有持久化的储存在服务重启之后会数据丢失。解决方法是使用Redis等缓存中间件。 2.3、CacheEvict注解
DELETE
/*** CacheEvict:清理指定缓存* value缓存名称 每个缓存可以有多个key* key缓存的key #result.id:动态生成keyName进行缓存*/
CacheEvict(value userCache,key #id)
//CacheEvict(value userCache,key #p0)
//CacheEvict(value userCache,key #root.args[0])
// 上述三种方式都是相同的效果动态获取id的参数作为缓存的唯一标识
DeleteMapping(/{id})
public void delete(PathVariable Long id){userService.removeById(id);
}UPDATE
CacheEvict(value userCache,key #user.id)
//CacheEvict(value userCache,key #p0.id)
//CacheEvict(value userCache,key #root.args[0].id)
//CacheEvict(value userCache,key #result.id)
PutMapping
public User update(User user){userService.updateById(user);return user;
}2.4、Cacheable注解 /*** Cacheable在方法执行前spring先查看缓存中是否有数据* 如果有数据则直接返回缓存数据;若没有数据调用方法并将方法返回值放到缓存中;* value缓存名称 每个缓存可以有多个key* key缓存的key #result.id:动态生成keyName进行缓存* condition满足条件就进行缓存,无法使用#result* unless满足条件就不进行缓存可以使用#result--看源码注解*/ Cacheable(value userCache, key #id, condition #unless null)GetMapping(/{id})public User getById(PathVariable Long id) {User user userService.getById(id);return user;}在方法执行前spring先查看缓存中是否有数据如果有数据则直接返回缓存数据;若没有数据调用方法并将方法返回值放到缓存中。 Cacheable(value userCache, key #user.id_#user.name)
//多个变量的拼接
GetMapping(/list)
public ListUser list(User user) {LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper();queryWrapper.eq(user.getId() ! null, User::getId, user.getId());queryWrapper.eq(user.getName() ! null, User::getName, user.getName());ListUser list userService.list(queryWrapper);return list;
}3、Spring Cache使用方式–redis
在Spring Boot项目中使用Spring Cache的操作步骤(使用redis缓存技术):
1、导入maven坐标 spring-boot-starter-data-redis、spring-boot-starter-cache dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency
2、配置application.yml
spring:redis:host: 127.0.0.1port: 6379password: 123456database: 0cache:redis:time-to-live: 1800000 #设置缓存过期时间可选3、在启动类上加入EnableCaching注解开启缓存注解功能 4、在Controller的方法上加入Cacheable、CacheEvict等注解进行缓存操作
Demo项目源码SpringCache-Demo