Spring Boot 中的 @Cacheable 注解

这篇具有很好参考价值的文章主要介绍了Spring Boot 中的 @Cacheable 注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Boot 中的 @Cacheable 注解

在 Spring Boot 中,缓存是一个非常重要的话题。当我们需要频繁读取一些数据时,为了提高性能,可以将这些数据缓存起来,避免每次都从数据库中读取。为了实现缓存,Spring Boot 提供了一些缓存注解,其中最常用的是 @Cacheable 注解。

Spring Boot 中的 @Cacheable 注解,Java 教程,spring boot,spring,java

@Cacheable 注解是什么?

@Cacheable 注解用于标记一个方法需要被缓存。在注解中,可以指定缓存的名称和缓存的键。例如:

@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {
    // 从数据库中读取用户信息
}

在上面的例子中,缓存的名称是 users,缓存的键是方法的参数 id。当方法被执行时,Spring Boot 会先查找缓存,如果缓存中存在相应的数据,则直接从缓存中读取,否则执行方法并将结果缓存到缓存中。

@Cacheable 注解的原理

当一个方法被标记为 @Cacheable 注解时,Spring Boot 会先查找是否存在缓存,如果缓存中存在相应的数据,则直接从缓存中读取,否则执行方法并将结果缓存到缓存中。

在 Spring Boot 中,缓存的实现是通过缓存管理器来实现的。缓存管理器负责缓存的创建、读取、更新和删除等操作。Spring Boot 提供了多种缓存管理器的实现,例如 Ehcache、Redis、Caffeine 等。

当使用 @Cacheable 注解时,需要指定一个缓存管理器。可以通过在配置文件中配置缓存管理器,例如:

spring:
  cache:
    type: redis
    redis:
      host: localhost
      port: 6379
      password: password

在上面的例子中,使用 Redis 作为缓存管理器,设置 Redis 的主机地址、端口号和密码。可以根据实际情况进行配置。

@Cacheable 注解的使用

使用 @Cacheable 注解非常简单,只需要在方法上添加注解即可。例如:

@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {
    // 从数据库中读取用户信息
}

在上面的例子中,@Cacheable 注解的值为 users,表示缓存的名称是 userskey 属性为 #id,表示缓存的键是方法的参数 id。当方法被执行时,Spring Boot 会先查找缓存,如果缓存中存在相应的数据,则直接从缓存中读取,否则执行方法并将结果缓存到缓存中。

@Cacheable 注解的高级使用

在使用 @Cacheable 注解时,还可以设置一些高级属性。下面介绍几个常用的高级属性:

condition

condition 属性可以用来设置一个条件表达式,只有当表达式为 true 时,才会执行缓存。例如:

@Cacheable(value = "users", key = "#id", condition = "#id > 0")
public User getUserById(Long id) {
    // 从数据库中读取用户信息
}

在上面的例子中,只有当 id 大于 0 时,才会执行缓存。

unless

unless 属性可以用来设置一个条件表达式,只有当表达式为 false 时,才会执行缓存。例如:

@Cacheable(value = "users", key = "#id", unless = "#result == null")
public User getUserById(Long id) {
    // 从数据库中读取用户信息
}

在上面的例子中,只有当方法返回值不为空时,才会执行缓存。

sync

sync 属性可以用来设置是否启用同步缓存。当多个线程同时访问同一个缓存时,如果不启用同步缓存,则可能出现线程安全问题。可以通过设置 sync 属性为 true 来启用同步缓存。例如:

@Cacheable(value = "users", key = "#id", sync = true)
public User getUserById(Long id) {
    // 从数据库中读取用户信息
}

在上面的例子中,启用了同步缓存。

@Cacheable 注解的注意事项

在使用 @Cacheable 注解时,需要注意以下几点:

  1. 缓存的名称必须唯一,否则可能会出现缓存冲突的问题。
  2. 缓存的键必须能够唯一标识一条数据,否则可能会出现缓存错误的问题。
  3. 缓存的数据类型必须与方法的返回类型相同,否则可能会出现类型转换错误的问题。
  4. 当使用缓存时,需要注意缓存的失效时间,否则可能会出现缓存数据过期的问题。

示例代码

下面是一个使用 @Cacheable 注解的示例代码:

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users/{id}")
    @Cacheable(value = "users", key = "#id")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }
}

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

在上面的代码中,UserController 类中的 getUserById 方法使用了 @Cacheable 注解,指定了缓存的名称为 users,缓存的键为方法的参数 id。当方法被执行时,Spring Boot 会先查找缓存,如果缓存中存在相应的数据,则直接从缓存中读取,否则执行 UserService 类中的 getUserById 方法,并将结果缓存到缓存中。

结论

在 Spring Boot 中,使用 @Cacheable 注解可以非常方便地实现缓存功能。通过设置缓存的名称和缓存的键,可以实现精细的缓存控制。同时,使用高级属性可以进一步提高缓存的灵活性和可靠性。在实际项目中,需要根据实际情况选择合适的缓存管理器和缓存失效策略,以保证缓存的正确性和性能。文章来源地址https://www.toymoban.com/news/detail-522933.html

到了这里,关于Spring Boot 中的 @Cacheable 注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Spring Boot 中的 @Field 注解详解

    Spring Boot 中的 @Field 注解详解

    Spring Boot 是目前 Java 生态圈中最受欢迎的 Web 应用开发框架之一,它提供了很多优秀的功能和工具,可以帮助开发者快速构建高效、可靠的 Web 应用程序。其中一个重要的功能就是数据绑定和验证,Spring Boot 提供了多种方式来绑定请求参数、表单数据、JSON 数据等。其中,@Fi

    2024年02月11日
    浏览(12)
  • Spring Boot中的@GetMapping注解,如何使用

    Spring Boot中的@GetMapping注解,如何使用

    Spring Boot是一个流行的Java框架,它提供了许多方便的注解和工具,使得Web应用程序的开发变得更加容易。其中,@GetMapping注解是Spring Boot中最常用的注解之一,它可以帮助开发者定义和处理HTTP GET请求。 @GetMapping注解可以用于类和方法上,用于定义HTTP GET请求的URL路径。当客户

    2024年02月11日
    浏览(12)
  • 快速了解spring boot中的@idempotent注解

    目的:一定时间内,同样的请求(业务参数相同)访问同一个接口,则只能成功一次,其余被拒绝 幂等实现原理就是利用AOP面向切面编程, 在执行业务逻辑之前插入一个方法,生成一个token,存入redis并插入到response中返回给前台,然后前台再拿着token发起请求,经过判断只执行

    2024年01月21日
    浏览(10)
  • Spring Boot 中的 @PostMapping 注解,如何使用

    Spring Boot 中的 @PostMapping 注解,如何使用

    在 Spring Boot 中,我们经常需要编写 RESTful Web 服务,以便于客户端与服务器之间的通信。为了简化 RESTful Web 服务的开发,Spring Boot 提供了 @PostMapping 注解,它可以让我们更方便地编写 POST 请求处理方法。 在本文中,我们将介绍 @PostMapping 注解的作用、原理,以及如何在 Spring

    2024年02月16日
    浏览(13)
  • Spring Boot中的@MessageMapping注解:原理及使用

    Spring Boot中的@MessageMapping注解:原理及使用

    在Web应用程序中,实现实时的双向通信是一项重要的功能。为了实现这种功能,需要使用WebSocket协议。Spring框架提供了Spring WebSocket模块来实现WebSocket通信。Spring Boot是基于Spring框架构建的,它提供了一些方便的注解和自动配置来简化WebSocket的开发。 @MessageMapping注解是Spring B

    2024年02月12日
    浏览(44)
  • Spring 中的 @Cacheable 缓存注解,太好用了!

    Spring 中的 @Cacheable 缓存注解,太好用了!

    第一个问题,首先要搞明白什么是缓存,缓存的意义是什么。 对于普通业务,如果要查询一个数据,一般直接select数据库进行查找。但是在高流量的情况下,直接查找数据库就会成为性能的瓶颈。因为数据库查找的流程是先要从磁盘拿到数据,再刷新到内存,再返回数据。磁

    2024年02月16日
    浏览(7)
  • Spring Boot 中的 @Controller 注解:原理、用法与示例

    Spring Boot 中的 @Controller 注解:原理、用法与示例

    Spring Boot 是一个快速开发 Spring 应用程序的框架,它提供了很多有用的功能和特性。其中,@Controller 注解是一个常用的注解,它可以将一个 Java 类标记为 Spring MVC 中的控制器。本文将介绍 Spring Boot 中 @Controller 注解的原理、用法和示例。 在 Spring MVC 中,@Controller 注解用于标识

    2024年02月07日
    浏览(15)
  • Java、Java EE、Spring和Spring Boot核心注解

    文章迁移至个人博客 此页面包含常用 Java 、 Java EE 、 Spring 、 Spring Boot 、 JPA 常用注解的一站式说明。 @Component注解 @Component 注解表明被注解的类是一个“spring bean/组件”。@Component注解告诉Spring容器自动创建Spring bean。 @Autowired注解 @Autowired 注解用于自动注入 bean。@Autowired 注

    2024年02月15日
    浏览(16)
  • Spring Boot 中的 @FeignClient 注解是什么,原理,如何使用

    Spring Boot 中的 @FeignClient 注解是什么,原理,如何使用

    在微服务架构中,服务之间的调用是非常频繁的。为了简化服务之间的调用,Spring Boot 提供了一个叫做 Feign 的组件。Feign 可以帮助我们定义和实现服务之间的 RESTful 接口,使得服务之间的调用更加方便和可靠。在本文中,我们将深入探讨 Spring Boot 中的 @FeignClient 注解是什么,

    2024年02月09日
    浏览(49)
  • Spring Boot 中的 @RefreshScope 注解是什么,原理,如何使用

    Spring Boot 中的 @RefreshScope 注解是什么,原理,如何使用

    在 Spring Boot 中,@RefreshScope 注解是一个非常有用的注解。它可以让 Spring Boot 应用程序在运行时重新加载配置。这意味着您可以在不停止和重新启动应用程序的情况下更改配置。在本文中,我们将介绍 @RefreshScope 注解的原理和如何在 Spring Boot 应用程序中使用它。 @RefreshScope 是

    2024年02月13日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包