You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Micronaut @Cacheable注解的TTL、保留策略及缓存存储问题咨询

Micronaut @Cacheable 相关问题解答

先看你使用的@Cacheable注解代码:

@Retryable(attempts = "5", delay = "20ms", multiplier = "2.0")
@Cacheable(value = ["my-cache"], parameters = ["id"])
@Get("/fetch/mydata")
fun fetchData() {
   ....required confs for calling the api
}

针对你的三个问题,解答如下:

1. 默认TTL是多少?

Micronaut的@Cacheable注解本身没有预设TTL(存活时间),如果不手动配置过期规则,缓存项会一直保留在存储介质中,直到被手动清除,或者缓存存储达到容量上限触发淘汰策略。
若需要设置TTL,可在应用配置文件(如application.yml)中针对指定缓存进行配置,示例:

micronaut:
  caches:
    my-cache:
      expire-after-write: 5m

2. SOURCE、CLASS、RUNTIME 保留策略枚举的含义

这三个是注解的保留策略,决定注解在代码生命周期中的存在阶段:

  • SOURCE:注解仅存在于源代码中,编译成字节码时会被丢弃,不会进入class文件。多用于编译期校验、代码生成等场景,无法在运行时通过反射读取。
  • CLASS:注解会被保留到class文件中,但JVM加载类时不会将其载入运行时环境,这是注解的默认保留策略。通常用于字节码增强类的操作。
  • RUNTIME:注解会一直保留到运行时,JVM加载类后可通过反射机制读取注解信息。像@Cacheable这类需要在运行时生效的注解,就采用这个保留策略。

3. 缓存项存储在何处?

默认情况下,Micronaut使用JVM堆内存作为缓存存储介质,底层基于ConcurrentHashMap实现,缓存数据直接存在当前应用进程的堆内存中。
如果配置了第三方缓存实现(如Caffeine、Redis、Hazelcast等),缓存项会存储到对应的介质中:

  • Caffeine:本地堆内存缓存(比默认实现更高效,支持更多淘汰策略)
  • Redis:远程Redis服务器
  • Hazelcast:分布式内存集群

内容的提问来源于stack exchange,提问作者Mohamed Niyaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 18:22:37