【问题标题】:How to set expiration for @Cacheable in Spring Boot?如何在 Spring Boot 中为 @Cacheable 设置过期时间?
【发布时间】:2021-11-09 03:06:15
【问题描述】:

我在 Spring Boot 应用程序中有以下缓存实现,它可以正常工作。但是,我想为这种方法定义过期。 @Cacheable可以设置过期时间吗?

我查看Expiry time @Cacheable spring boot,似乎没有直接的方法@Cacheable。是否可以通过智能方法实现?

@Configuration
@EnableCaching
public class CachingConfig {

    @Bean
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager();
    }
}
@Component
public class SimpleCacheCustomizer 
  implements CacheManagerCustomizer<ConcurrentMapCacheManager> {

    @Override
    public void customize(ConcurrentMapCacheManager cacheManager) {
        cacheManager.setCacheNames(asList("users"));
    }
}
@Cacheable("users")
public List<User> getUsers(UUID id) {...}

【问题讨论】:

    标签: java spring spring-boot caching cache-expiration


    【解决方案1】:

    正如Spring documentation中所说,Spring的默认缓存系统是没有TTL的。

    8.7。如何设置 TTL/TTI/Eviction 策略/XXX 功能?

    直接通过您的缓存提供程序。缓存抽象是一个 抽象,而不是缓存实现。您使用的解决方案可能 支持其他数据策略和不同的拓扑 解决方案不支持(例如,JDK ConcurrentHashMap — 在缓存抽象中公开它是 没用,因为没有后盾支持)。这样的功能 应该通过后备缓存直接控制(当 配置它)或通过其本机 API

    如果您需要 TTL 配置,则必须使用其他缓存提供程序,例如 RedisGemfire

    here 提供了如何使用 TTLRedis 的示例。

    【讨论】:

    • 非常感谢,我也意识到了。但是如何在上面的实现中使用 Redis 或 Gemfire?我尝试使用stackoverflow.com/questions/44202700/… 中提到的另一个,但现在可以使用
    • 您能否通过将其集成到上述方法中作为示例代码发布?
    • 我已经回答了你的问题。如果您对 Redis 配置有疑问,您应该创建另一个帖子,向我们展示您做了什么,什么没用。同时,我可以给这个网址baeldung.com/spring-boot-redis-cache,告诉你如何使用它。
    • 对于大型分布式应用程序,您应该首选Redis,否则,您可以选择EhCache 以获得简单的快速内存缓存。两者都很好。
    • 没有代码我帮不了你,但看来你需要使一个对象可序列化。
    猜你喜欢
    • 2019-05-23
    • 2016-06-25
    • 2021-01-09
    • 1970-01-01
    • 2022-08-21
    • 2016-11-09
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多