我通常在我的 spring-boot 应用程序中使用带有缓存配置的 @Cacheable
并为每个缓存设置特定的 TTL(生存时间)。
我最近继承了一个使用 @Cacheable
的 Spring Boot 应用程序,没有明确说明缓存管理器和 ttl。我会将其更改为明确的。
但是当没有明确的内容时,我无法找出默认值是什么。
我确实查看了 文档,但在那里什么也没找到
原文由 Anand Sunderraman 发布,翻译遵循 CC BY-SA 4.0 许可协议
我通常在我的 spring-boot 应用程序中使用带有缓存配置的 @Cacheable
并为每个缓存设置特定的 TTL(生存时间)。
我最近继承了一个使用 @Cacheable
的 Spring Boot 应用程序,没有明确说明缓存管理器和 ttl。我会将其更改为明确的。
但是当没有明确的内容时,我无法找出默认值是什么。
我确实查看了 文档,但在那里什么也没找到
原文由 Anand Sunderraman 发布,翻译遵循 CC BY-SA 4.0 许可协议
Spring @Cacheable 没有任何可配置的选项来为缓存设置 TTL
尽管您可以使用 @CacheEvict 和 @Scheduled 构建它,如下所示:
@CacheEvict(allEntries = true, cacheNames = { "cache_1", "cache_2" })
@Scheduled(fixedDelay = 30000)
public void cacheEvict() {
}
您可以在此处找到详细的解决方案/说明 - Setting TTL for @Cacheable – Spring 。
原文由 Arpit Aggarwal 发布,翻译遵循 CC BY-SA 3.0 许可协议
8 回答6.2k 阅读
1 回答2.1k 阅读✓ 已解决
1 回答1.9k 阅读✓ 已解决
1.9k 阅读
2 回答1.1k 阅读
1 回答933 阅读
1 回答469 阅读
Spring 非常清楚 TTL/TTI (Expiration) 和 Eviction 策略,如 这里 的核心 Spring 框架参考指南 中所述。换句话说,“默认值”完全取决于通过 Spring Cache Abstraction 与 Spring Boot 应用程序一起使用的底层数据存储(也称为缓存提供程序)。
虽然 Arpit 的 解决方案是一个很好的解决方案,并且是跨不同缓存提供程序(数据存储)的通用、可转移的解决方案,但它也无法涵盖更具体的过期/驱逐策略,例如在过期/驱逐时执行的操作类型,例如 OVERFLOW_TO_DISK,或仅 LOCAL_DESTROY(例如在高可用(可能基于分区)、分布式场景中)或 INVALIDATE 等。
通常,根据 UC,驱逐“所有”条目不是一个可接受的选项,这也是 Spring 将此责任委托给缓存提供者的原因之一,因为此功能在一个提供者与另一个提供者之间差异很大。
总之…一定要查看您的 UC 的要求,并将适当的缓存提供程序与与您的 UC 相匹配的功能配对。 Spring 支持各种各样的缓存提供程序,从 Redis 到 Apache Geode/Pivotal GemFire 到 Hazelcast 等,在这方面每个都有不同/相似的功能。