阅读(34) (0)

Micronaut 缓存 Advice

2023-02-23 11:11:30 更新

与 Spring 和 Grails 一样,Micronaut 在 io.micronaut.cache 包中提供了缓存注解。

CacheManager 接口允许根据需要插入不同的缓存实现。

SyncCache 接口提供用于缓存的同步 API,而 AsyncCache API 允许非阻塞操作。

缓存注解

支持以下缓存注释:

  • @Cacheable - 指示方法可缓存在指定的缓存中
  • @CachePut - 指示应缓存方法调用的返回值。与@Cacheable 不同,原始操作永远不会被跳过。
  • @CacheInvalidate - 指示方法的调用应导致一个或多个缓存失效。

使用这些注释之一会激活 CacheInterceptor,在 @Cacheable 的情况下,它会缓存方法的返回值。

如果方法返回类型是非阻塞类型(CompletableFuture 或 Publisher 的实例),则会缓存发出的结果。

此外,如果底层 Cache 实现支持非阻塞缓存操作,则读取缓存值时不会阻塞,从而导致非阻塞缓存操作。

配置缓存

默认情况下,Caffeine 用于从应用程序配置创建缓存。例如:

缓存配置示例

 Properties Yaml  Toml  Groovy  Hocon  JSON 
micronaut.caches.my-cache.maximum-size=20
micronaut:
  caches:
    my-cache:
      maximum-size: 20
[micronaut]
  [micronaut.caches]
    [micronaut.caches.my-cache]
      maximum-size=20
micronaut {
  caches {
    myCache {
      maximumSize = 20
    }
  }
}
{
  micronaut {
    caches {
      my-cache {
        maximum-size = 20
      }
    }
  }
}
{
  "micronaut": {
    "caches": {
      "my-cache": {
        "maximum-size": 20
      }
    }
  }
}

上面的示例配置了一个名为“my-cache”的缓存,最大大小为 20。

命名缓存

在 micronaut.caches 下以 kebab 大小写定义缓存名称(小写和连字符分隔);如果您使用驼峰式大小写,名称将标准化为烤肉串大小写。例如 myCache 变成 my-cache。在 @Cacheable 注释中引用缓存时,必须使用 kebab-case 形式。

要将称重器配置为与 maximumWeight 配置一起使用,请创建一个实现 io.micronaut.caffeine.cache.Weigher 的 bean。要将给定的称重器仅与特定缓存相关联,请使用 @Named(<cache name>) 注释 bean。没有命名限定符的称重器适用于所有没有命名称重器的缓存。如果没有找到 bean,则使用默认实现。

动态缓存创建

可以为无法提前配置缓存的用例注册 DynamicCacheManager bean。当尝试检索未预定义的缓存时,将调用动态缓存管理器来创建并返回缓存。

默认情况下,如果应用程序中没有定义其他动态缓存管理器,Micronaut 会注册一个 DefaultDynamicCacheManager 实例,该实例使用默认值创建 Caffeine 缓存。

其他缓存实现

查看 Micronaut 缓存项目以获取更多信息。