Spring @Cacheable 默认 TTL

作者:编程家 分类: spring 时间:2025-07-16

使用Spring框架的@Cacheable注解可以轻松地实现缓存功能,这个注解可以应用在方法上,将方法的返回值缓存下次再调用同样的方法时,可以直接从缓存中获取结果,而不需要再执行方法体内的逻辑。@Cacheable注解提供了默认的TTL(Time to Live)设置,即缓存的存活时间,默认为-1,表示永久存活。本文将详细介绍@Cacheable注解的使用,并通过一个案例代码来演示其功能。

案例代码

首先,我们需要在Spring Boot项目中添加相应的依赖。在pom.xml文件中添加以下代码:

xml

org.springframework.boot

spring-boot-starter-cache

接下来,我们创建一个名为UserService的服务类,其中包含一个使用@Cacheable注解的方法getUserById:

java

import org.springframework.cache.annotation.Cacheable;

import org.springframework.stereotype.Service;

@Service

public class UserService {

@Cacheable(value = "users", key = "#userId")

public User getUserById(String userId) {

// 模拟从数据库中获取用户信息的逻辑

// 这里省略具体的实现代码

}

}

在上述代码中,@Cacheable注解的value属性指定了缓存的名称,这里我们将缓存的名称设置为"users"。key属性用于指定缓存的键,这里我们使用方法的参数userId作为缓存的键。

接下来,我们需要在Spring Boot的配置文件中启用缓存功能。在application.properties文件中添加以下配置:

spring.cache.type=redis

在上述配置中,我们使用Redis作为缓存的存储方式,如果你希望使用其他的缓存存储方式,可以根据实际需求进行相应的配置。

使用@Cacheable注解实现缓存

使用@Cacheable注解非常简单,只需要在需要缓存的方法上添加该注解即可。当第一次调用getUserById方法时,会执行方法体内的逻辑,并将返回值缓存起来。下次再调用该方法时,如果传入相同的userId参数,将直接从缓存中获取结果,而不需要再执行方法体内的逻辑。

自定义缓存的TTL

默认情况下,@Cacheable注解的TTL设置为-1,表示永久存活。如果我们希望缓存有一个固定的存活时间,可以通过设置@Cacheable注解的配置项进行自定义。

例如,我们希望缓存的存活时间为60秒,可以在@Cacheable注解中添加以下配置:

java

@Cacheable(value = "users", key = "#userId", ttl = 60)

在上述代码中,我们通过设置ttl属性为60,将缓存的存活时间设置为60秒。这样,在60秒内再次调用getUserById方法时,将直接从缓存中获取结果。超过60秒后,再次调用该方法时,将重新执行方法体内的逻辑,并重新缓存结果。

通过使用Spring的@Cacheable注解,我们可以轻松地实现缓存功能,提高系统的性能和响应速度。在使用@Cacheable注解时,可以根据实际需求来设置缓存的TTL,以满足不同的业务场景。希望本文对你理解@Cacheable注解的使用有所帮助,如果有任何疑问,欢迎留言讨论。

参考资料:

- [Spring Framework Documentation](https://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#cache)

- [Spring Boot Documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.caching)