Spring Cache的使用

一、前言

在日常开发工作中,缓存是一个很常见的技术手段,它可以有效地提高系统性能。当系统对数据的读取操作远大于写入操作的时候,往往我们会使用缓存来暂时存储热点数据,降低直接访问持久化存储的次数,从而减轻数据库的压力。
本文将介绍Spring Cache这个库,以及如何在项目中使用它。

二、什么是Spring Cache?

  • Spring Cache是Spring提供的一套缓存抽象功能,它通过注解的方式,让我们可以很方便地在应用中添加缓存。它支持多种缓存实现,如:EhCache、Redis、Guava Cache。
  • 在 Spring 框架中,Spring Cache 提供了一种简洁、易用的缓存机制,让您可以专心地编写业务代码,而不必关心缓存的管理和维护

针对不同的缓存技术需要实现不同的CacheManager:

在这里插入图片描述

三、Spring Cache常用注解

注解说明
@EnableCaching开启缓存注解功能
@Cacheable使用该注解的方法在执行前,先将方法的参数作为 key 去缓存中查找,如果缓存中存在该 key,则直接返回对应的结果;否则,执行该方法,并将结果存储到缓存中
@CachePut使用该注解的方法总是会执行,并将其结果存储到缓存中。这个注解常用于更新缓存。
@CacheEvict使用该注解的方法会从缓存中移除指定的数据
@Caching这个注解用于组合以上三种注解,可以在一个方法中同时使用多个缓存注解。

四、使用方法

配置spring Cache

1.导入依赖

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

配置application.yml文件

spring:
  cache:
    redis:
      time-to-live: 1800000 #设置缓存数据过期时间

2.开启缓存注解

在启动类上添加@EnableCaching注解

@SpringBootApplication
@EnableCaching//开启缓存注解功能
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

3.@Cacheables

value代表一类缓存的名称,key是一类缓存中的每个值对应的键

@Cacheable(value = "users", key = "#id")
public User findUserById(Long id) {
    // 数据库查询操作
    return userRepository.findById(id); 
}

4.@CachePut

@CachePut(value = "users", key = "#user.id")
public User updateUser(User user) {
    // 更新数据库操作
    userRepository.update(user);
    return user;
}

5.@CacheEvict

@CacheEvict(value = "users", key = "#id")
public void deleteUser(Long id) {
    // 删除数据库操作
    userRepository.delete(id);
}

6.@Caching

@Caching(
    put = @CachePut(value = "users", key = "#user.id"),
    evict = @CacheEvict(value = "users", key = "#user.oldId")
)
public User updateUserWithNewId(User user) {
    // 更新数据库操作
    userRepository.update(user);
    // 删除用户老 ID 的操作
    userRepository.delete(user.getOldId());
    return user;
}

Spring CacheSpring框架提供的一种缓存机制,用于提高应用程序的性能和响应速度。通过使用Spring Cache,可以将方法的返回值缓存起来,当下次调用相同的方法时,可以直接从缓存中获取结果,而不需要再执行方法的逻辑。 在使用Spring Cache时,需要进行一些配置。首先,需要添加Redis的配置信息,包括缓存类型、缓存过期时间、缓存键的前缀等。可以通过设置`spring.cache.type`为`redis`来指定使用Redis作为缓存类型。可以使用`spring.cache.redis.time-to-live`设置缓存的过期时间,单位为毫秒。可以使用`spring.cache.redis.key-prefix`设置缓存键的前缀,如果不指定前缀,则默认使用缓存的名字作为前缀。可以使用`spring.cache.redis.use-key-prefix`设置是否使用前缀,默认为true。可以使用`spring.cache.redis.cache-null-values`设置是否缓存空值,以防止缓存穿透。 另外,Spring Cache还支持使用JCache(JSR-107)注解来简化开发。从Spring 3.1开始,定义了`org.springframework.cache.Cache`和`org.springframework.cache.CacheManager`接口来统一不同的缓存技术。 在使用Spring Cache时,可以通过在方法上添加`@Cacheable`注解来启用缓存功能。当调用带有`@Cacheable`注解的方法时,Spring会首先检查缓存中是否存在相应的结果,如果存在,则直接返回缓存中的结果,如果不存在,则执行方法的逻辑,并将结果存入缓存中。 总结起来,使用Spring Cache可以通过配置Redis等缓存信息,并在方法上添加`@Cacheable`注解来实现缓存功能,提高应用程序的性能和响应速度。 #### 引用[.reference_title] - *1* [SpringCache使用](https://blog.csdn.net/ABestRookie/article/details/121297482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [springcache使用详解(使用redis做分布式缓存)](https://blog.csdn.net/A_art_xiang/article/details/125580962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蓝朽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值