0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spring Bootでキャッシュを設定する方法(Spring Cache&Caffeine)

0
Posted at

はじめに

Spring Bootアプリケーションのローカルキャッシュを実現する必要が出たので、Spring Cacheを使用して実現する方法を調べた情報・実装例をまとめて記事にします。
以下の内容を記載します。

  • Spring Cacheの実装例
  • Cacheの設定例

実行環境

以下の環境で動作確認しています。

  • OpenJDK 17
  • spring-boot-stater-cache 4.1.0
  • caffeine 3.2.4

Spring Cacheとは

SpringFrameworkが提供するキャッシュ機能を使用してSpring Bootアプリケーションにアノテーションベースでキャッシュ機能を提供する仕組みです。@Cachebleのようなアノテーションをメソッドに付与するだけで動作し、CaffeineやRedisとような個別のキャッシュ機能を意識せずに切りかえられる抽象化レイヤーとして機能します。DBアクセスや外部API呼び出しなどの重い処理の結果を再利用して、アプリケーションのレスポンス速度向上や負荷軽減を実現できます。

実装例

以下のようにキャッシュしたいメソッドに対して@Cacheableのアノテーションを付与することで機能します。キャッシュのキーとなる属性も指定可能です。

    @Cacheable(cacheNames = "BookCache")
    public List<Book> findAll() {
        return bookRepository.findAll();
    }

    @Cacheable(cacheNames = "BookCache", key = "#id")
    public Book findById(Long id) {
        return bookRepository.findById(id);
    }

また、キャッシュを有効化するために@EnableCachingの付与も必要です。

@SpringBootApplication
@EnableCaching
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

Cacheの動作設定

キャッシュの動作設定はapplication,ymlに記載する方法とJavaファイルに記載する方法があります。
キャッシュで保持するレコードの最大エントリー数、キャシュの保持期限を設定することが可能です。
※以下はどちらもBookCacheに最大エントリー数100、キャッシュの保持期限120秒を設定する例です。

application.ymlに記載する方法

spring:
    cache:
        cache-names: BookCache
        caffeine:
            spec: maximumSize=100, expireAfterWrite=120s

Javaファイルに記載する方法

複数のキャッシュを利用し、個々のキャッシュごとに異なる設定を行う場合にはこちらのJavaのConfigを作成する方法を採用してください。(application.ymlの場合はspecに記載した設定はすべてのキャッシュで共有されるためです。)

@Configuration
public class CacheConfig {
    public CacheManager cacheManager() {
        CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();

        caffeineCacheManager.registerCustomCache("BookCache",
                Caffeine.newBuilder().maximumSize(100).expireAfterWrite(120, TimeUnit.SECONDS).recordStats().build());

        return caffeineCacheManager;
    }
}

まとめ

Spring Bootアプリケーションでキャッシュを有効化する実装例をまとめました。
キャッシュの設定などは要件に応じて色々といじる必要が出てきそうですね。設定の考慮部分が多い印象ですが、基本的に実装はアノテーションを付与するだけでキャッシュを実現できる便利な機能だと感じました。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?