💴

SpringBoot × Kotlin × Caffeine でキャッシュを利用する

2022/10/28に公開

Caffeine とは

リポジトリ
https://github.com/ben-manes/caffeine

Guava's Cache is the predecessor library and the adapters provide a simple migration strategy.

とある通り、 Google Guava の Cache が前身の Java 8 で書かれたキャッシュライブラリが Caffeine

使っていく

依存関係の追加

build.gradle.kts

    implementation("org.springframework.boot:spring-boot-starter-cache")
    implementation("com.github.ben-manes.caffeine:caffeine")

キャッシュの機能を有効化する

Configuration クラスに@EnableCaching を貼る

import org.springframework.cache.annotation.EnableCaching
import org.springframework.context.annotation.Configuration

@Configuration
@EnableCaching
class CacheConfiguration {
    ...
}

キャッシュしたいオブジェクトを返却する関数に設定を追加

@Cacheable("cacheA")
fun getUserId(): String{
  // String型のユーザIDを返却する
}


有効化するには @Cacheable を使いましたが、更新(@CachePut)削除(@CacheEvit) も存在しています。

詳細についてはこちらのサイトが詳しく書かれています。
https://rennnosukesann.hatenablog.com/entry/2019/08/12/100220

Caffeine の設定

ざっくりとした説明は SpringBoot の公式ドキュメントにも記載されてます。
https://spring.pleiades.io/spring-boot/docs/current/reference/html/io.html#io.caching.provider.caffeine

application.ymlにキャッシュの設定を記述します
spec に記載した内容でキャッシュの生存期間やキャッシュするサイズを設定できます。
下記記載だと最大サイズが 500 で最後にキャッシュにアクセスされてから 10 分間経過すると削除されます。

spring:
  cache:
    cache-names: "cacheA"
    caffeine:
      spec: "maximumSize=500,expireAfterAccess=600s"

設定できる他のパラメータだと、 expireAfterWrite (最初にキャッシュが作られてから指定した時間経過するとキャッシュが削除される) を設定することが多いかと思います。

他設定できるパラメータについては javadoc を参照ください。
https://www.javadoc.io/doc/com.github.ben-manes.caffeine/caffeine/latest/com.github.benmanes.caffeine/com/github/benmanes/caffeine/cache/CaffeineSpec.html

参考文献

https://spring.pleiades.io/guides/gs/caching/
https://pppurple.hatenablog.com/entry/2017/02/21/235733
https://kazuhira-r.hatenablog.com/entry/20161204/1480818544

Discussion