十堰秦楚网 十堰新闻门户网站,深圳建设合同备案 网站,商业网站建设案例视频,花生壳盒子做网站服务器个人简介#xff1a;Java领域新星创作者#xff1b;阿里云技术博主、星级博主、专家博主#xff1b;正在Java学习的路上摸爬滚打#xff0c;记录学习的过程~ 个人主页#xff1a;.29.的博客 学习社区#xff1a;进去逛一逛~ Spring Cache框架 简介Spring Cache 环境准备S… 个人简介Java领域新星创作者阿里云技术博主、星级博主、专家博主正在Java学习的路上摸爬滚打记录学习的过程~ 个人主页.29.的博客 学习社区进去逛一逛~ Spring Cache框架 简介Spring Cache 环境准备Spring Cache 常用注解使用 简介
Spring Cache是一个框架实现了基于注解的缓存功能只需要简单地加一个注解就能实现缓存功能。Spring Cache提供了一层抽象底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓存技术。 CacheManager是Spring提供的各种缓存技术抽象接口。
针对不同的缓存技术需要实现不同的CacheManager: Spring Cache 环境准备 maven依赖导入 !--缓存依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId/dependency!--redis依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencyyml配置文件
spring:cache:redis: # 设置redis缓存time-to-live: 1800000 #设置缓存过期时间可选开启缓存功能
在启动类上使用EnableCache注解
Slf4j
SpringBootApplication
EnableCaching //开启缓存
public class CacheDemoApplication {public static void main(String[] args) {SpringApplication.run(CacheDemoApplication.class,args);log.info(项目启动成功...);}
}操作缓存
在Controller层的方法上使用**Cacheable、CacheEvict、CachePut**等注解进行缓存操作。 Spring Cache 常用注解使用 在spring boot项目中使用缓存技术只需在项目中导入相关缓存技术的依赖包并在启动类上使用EnableCaching开启缓存支持即可。 EnableCachingCacheableCachePutCacheEvict 可使用用于动态计算密钥的Spring Expression Language (SpEL)表达式。 #result表示方法调用结果的引用。 #root.method, #root.target, 和 #root.caches分别用于引用方法、目标对象和受影响的缓存的缓存。 方法名(#root.methodName)和目标类(#root.targetClass) 方法参数可以通过索引访问。例如第二个参数可以通过#root访问:#root.args [1] #p1或#a1。如果信息可用也可以通过名称访问参数 CachePut注解 案例 /*** CachePut将方法返回值放入缓存* value缓存的名称每个缓存名称下面可以有多个key* key缓存的key*/CachePut(value userCache,key #user.id)PostMappingpublic User save(User user){userService.save(user);return user;}CacheEvict注解 案例 /*** CacheEvict清理指定缓存* value缓存的名称每个缓存名称下面可以有多个key* key缓存的key*/CacheEvict(value userCache,key #p0)//CacheEvict(value userCache,key #root.args[0])//CacheEvict(value userCache,key #id)DeleteMapping(/{id})public void delete(PathVariable Long id){userService.removeById(id);}Cacheable注解 案例 /*** Cacheable在方法执行前spring先查看缓存中是否有数据如果有数据则直接返回缓存数据若没有数据调用方法并将方法返回值放到缓存中* value缓存的名称每个缓存名称下面可以有多个key* key缓存的key* condition条件满足条件时才缓存数据无法使用#result等对象* unless满足条件则不缓存*///根据id获取信息Cacheable(value userCache,key #id,unless #result null)GetMapping(/{id})public User getById(PathVariable Long id){User user userService.getById(id);return user;}//获取所有消息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;}