快速入门: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 {

    @Autowired
    private UserMapper userMapper;

    @PostMapping
    public User save(@RequestBody User user){
        userMapper.insert(user);
        return user;
    }

    @DeleteMapping
    public void deleteById(Long id){
        userMapper.deleteById(id);
    }

	@DeleteMapping("/delAll")
    public void deleteAll(){
        userMapper.deleteAll();
    }

    @GetMapping
    public 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这个注解(原因:这个注解是将方法的返回值存储到缓存当中)。

 @Autowired
    private UserMapper userMapper;
    @CachePut(cacheNames = "userCache",key ="#user.id")
    //如果使用springCache缓存数据,key的生成:userCache:

    @PostMapping
    public 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();
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DJ懒羊羊。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值