Micronaut 緩存 Advice

2023-03-02 14:26 更新

與 Spring 和 Grails 一樣,Micronaut 在 io.micronaut.cache 包中提供了緩存注解。

CacheManager 接口允許根據(jù)需要插入不同的緩存實(shí)現(xiàn)。

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

緩存注解

支持以下緩存注釋:

  • @Cacheable - 指示方法可緩存在指定的緩存中
  • @CachePut - 指示應(yīng)緩存方法調(diào)用的返回值。與@Cacheable 不同,原始操作永遠(yuǎn)不會(huì)被跳過。
  • @CacheInvalidate - 指示方法的調(diào)用應(yīng)導(dǎo)致一個(gè)或多個(gè)緩存失效。

使用這些注釋之一會(huì)激活 CacheInterceptor,在 @Cacheable 的情況下,它會(huì)緩存方法的返回值。

如果方法返回類型是非阻塞類型(CompletableFuture 或 Publisher 的實(shí)例),則會(huì)緩存發(fā)出的結(jié)果。

此外,如果底層 Cache 實(shí)現(xiàn)支持非阻塞緩存操作,則讀取緩存值時(shí)不會(huì)阻塞,從而導(dǎo)致非阻塞緩存操作。

配置緩存

默認(rèn)情況下,Caffeine 用于從應(yīng)用程序配置創(chuàng)建緩存。例如:

緩存配置示例

 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
      }
    }
  }
}

上面的示例配置了一個(gè)名為“my-cache”的緩存,最大大小為 20。

命名緩存

在 micronaut.caches 下以 kebab 大小寫定義緩存名稱(小寫和連字符分隔);如果您使用駝峰式大小寫,名稱將標(biāo)準(zhǔn)化為烤肉串大小寫。例如 myCache 變成 my-cache。在 @Cacheable 注釋中引用緩存時(shí),必須使用 kebab-case 形式。

要將稱重器配置為與 maximumWeight 配置一起使用,請(qǐng)創(chuàng)建一個(gè)實(shí)現(xiàn) io.micronaut.caffeine.cache.Weigher 的 bean。要將給定的稱重器僅與特定緩存相關(guān)聯(lián),請(qǐng)使用 @Named(<cache name>) 注釋 bean。沒有命名限定符的稱重器適用于所有沒有命名稱重器的緩存。如果沒有找到 bean,則使用默認(rèn)實(shí)現(xiàn)。

動(dòng)態(tài)緩存創(chuàng)建

可以為無法提前配置緩存的用例注冊(cè) DynamicCacheManager bean。當(dāng)嘗試檢索未預(yù)定義的緩存時(shí),將調(diào)用動(dòng)態(tài)緩存管理器來創(chuàng)建并返回緩存。

默認(rèn)情況下,如果應(yīng)用程序中沒有定義其他動(dòng)態(tài)緩存管理器,Micronaut 會(huì)注冊(cè)一個(gè) DefaultDynamicCacheManager 實(shí)例,該實(shí)例使用默認(rèn)值創(chuàng)建 Caffeine 緩存。

其他緩存實(shí)現(xiàn)

查看 Micronaut 緩存項(xiàng)目以獲取更多信息。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)