当前位置: 首页 > news >正文

快速入门:Spring Cache

目录

一:Spring Cache简介

二:Spring Cache常用注解

2.1:@EnableCaching

2.2: @Cacheable

2.3:@CachePut 

2.4:@CacheEvict 

 三:Spring Cache案例

3.1:先在pom.xml中引入两个依赖

3.2:案例

3.2.1:构建数据库表

3.2.2:构建User类 

3.2.3:构建Controller  mapper层代码

3.2.4:在启动类上添加注解@EnableCaching

3.2.5:使用剩余部分注解


一:Spring Cache简介

Spring Cache是一个框架,实现了基于注解的缓存功能,只需要一个简单的注解,就能实现缓存功能。

Spring Cache提供了一层抽象,底层可以切换不同的缓存实现,例如: EHche Caffeine Redis.对应的不同缓存有不同的依赖。

二:Spring Cache常用注解

2.1:@EnableCaching

开启缓存注解功能,通常用在启动类上。

2.2: @Cacheable

在某个方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据value的值;如果没有缓存数据,调用方法并将返回值放到缓存中。

2.3:@CachePut 

将方法的返回值放到缓存中。

2.4:@CacheEvict 

将一条或多条数据从缓存中删除

 三:Spring Cache案例

3.1:先在pom.xml中引入两个依赖

  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

3.2:案例

3.2.1:构建数据库表

create database spring_cache_demo;
use spring_cache_demo;
CREATE TABLE `user` (`id` bigint NOT NULL AUTO_INCREMENT,`name` varchar(45) DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`)
);

3.2.2:构建User类 

@Data
public class User implements Serializable {private static final long serialVersionUID = 1L;private Long id;private String name;private int age;}

3.2.3:构建Controller  mapper层代码

由于当前业务逻辑比较简单,所以我们不需要service层的代码

//Controller层
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {@Autowiredprivate UserMapper userMapper;@PostMappingpublic User save(@RequestBody User user){userMapper.insert(user);return user;}@DeleteMappingpublic void deleteById(Long id){userMapper.deleteById(id);}@DeleteMapping("/delAll")public void deleteAll(){userMapper.deleteAll();}@GetMappingpublic User getById(Long id){User user = userMapper.getById(id);return user;}}
//mapper层代码
@Mapper
public interface UserMapper{@Insert("insert into user(name,age) values (#{name},#{age})")@Options(useGeneratedKeys = true,keyProperty = "id")void insert(User user);@Delete("delete from user where id = #{id}")void deleteById(Long id);@Delete("delete from user")void deleteAll();@Select("select * from user where id = #{id}")User getById(Long id);
}

3.2.4:在启动类上添加注解@EnableCaching


@Slf4j
@EnableCaching//代表开启注解
@SpringBootApplication
public class CacheDemoApplication {public static void main(String[] args) {SpringApplication.run(CacheDemoApplication.class,args);log.info("项目启动成功...");}
}

3.2.5:使用剩余部分注解

当是插入操作时,我们考虑用哪个注解?

我们考虑使用的是@CachePut这个注解(原因:这个注解是将方法的返回值存储到缓存当中)。

 @Autowiredprivate UserMapper userMapper;@CachePut(cacheNames = "userCache",key ="#user.id")//如果使用springCache缓存数据,key的生成:userCache:@PostMappingpublic User save(@RequestBody User user){userMapper.insert(user);return user;}

同时在mapper接口中,要加入user的id返回的注解,代码如下:

  @Insert("insert into user(name,age) values (#{name},#{age})")@Options(useGeneratedKeys = true,keyProperty = "id")void insert(User user);

 接口文档中进行测试:

Redis中进行查看:


 当根据用户的id查询用户时,我们该使用哪个注解?

 我们使用@Cacheable注解(在方法执行前,判断有没有缓存数据,如果有,直接进行返回,如果没有,则调用方法并将数据放到缓存当中)。

  @GetMapping@Cacheable(cacheNames = "userCache", key="#id")//key的生成:userCache:id value:为查询相应的数据,若是查询到,直接进行返回,如果查询不到,则将其加入到缓存public User getById(Long id){User user = userMapper.getById(id);return user;}

当删除一条或者多条数据时,使用哪个注解?

这个比较简单,我们使用@CacheEvit注解(这个注解可以删除一条或者多条数据)。 

   @DeleteMapping@CacheEvict(cacheNames = "userCache",key="#id")public void deleteById(Long id){userMapper.deleteById(id);}@DeleteMapping("/delAll")@CacheEvict(cacheNames = "userCache",allEntries=true)public void deleteAll(){userMapper.deleteAll();}
http://www.lryc.cn/news/198823.html

相关文章:

  • 探索音频传输系统:数字声音的无限可能 | 百能云芯
  • 【C++】-c++的类型转换
  • 《论文阅读28》OGMM
  • 忆联分布式数据库存储解决方案,助力MySQL实现高性能、低时延
  • 网络安全内网渗透之信息收集--systeminfo查看电脑有无加域
  • MySQL高可用架构学习
  • seata的AT模式分析
  • 【算法练习Day22】 组合总和 III电话号码的字母组合
  • react-------JS对象、数组方法实际应用集合
  • AWS SAP-C02教程6--安全
  • Go学习第一章——开发环境安装以及快速入门(GoLand)
  • 大数据学习(14)-Map Join和Common Join
  • Docker安装ES7.14和Kibana7.14(无账号密码)
  • Zynq中断与AMP~双核串口环回之PS与PL通信
  • 【一:实战开发testng的介绍】
  • C现代方法(第9章)笔记——函数
  • 【算法练习Day23】 复原 IP 地址子集子集 II
  • fastadmin框架token验证
  • 了解 AI :了解 AI 方面的一些术语 (中英文对照)
  • 【Python学习笔记】对象、方法
  • 企业IT资产设备折旧残值如何计算
  • Linux性能优化--性能工具:下一步是什么
  • 网工内推 | IT主管、高级网工,上市公司,必须持有HCIE认证
  • bulldog 靶机
  • 如何借助边缘智能网关打造智慧城市便民驿站
  • 谈谈电商App的压测
  • ​VsCode修改侧边栏字体大小——用缩放的方法​
  • 基于Java的农资采购销售管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 【AIGC核心技术剖析】扩大富有表现力的人体姿势和形状估计SMPLer-X模型
  • 【C++面向对象】1. 类、对象