Springのキャッシュ機能を徹底解説!@Cache○○とは?

Spring Frameworkには、アプリケーションの動作を高速化するためのキャッシュ機能が備わっています。
今回は、キャッシュを有効にするための設定方法と、キャッシュ操作に役立つ4つの主要アノテーション(@EnableCaching, @Cacheable, @CachePut, @CacheEvict)について、解説します。


1. キャッシュとは?なぜ使うの?

キャッシュとは、一度取得したデータを保存しておき、再度同じデータが必要になったときに、保存しておいたものを使う仕組みです。

たとえば、データベースから情報を取り出す処理があるとします。この処理には時間がかかりますが、一度その結果をキャッシュに保存しておけば、次回はデータベースにアクセスせずにすぐに結果を返すことができます。これにより、アプリケーションの動作が速くなり、サーバーの負荷も軽減されます。


2. キャッシュ機能を有効にする:@EnableCaching

まず、Springでキャッシュを使えるようにするためには、設定クラス@EnableCachingアノテーションを付ける必要があります。このアノテーションを追加するだけで、Springがキャッシュ関連の機能を自動的にセットアップしてくれます。

使い方

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

@Configuration
@EnableCaching
public class CacheConfig {
    // これだけでキャッシュ機能が有効に!
}
  • ポイント@EnableCachingを付けると、Springはキャッシュを管理するための機能をバックグラウンドで用意してくれます。しかし、この段階ではまだ具体的に何をキャッシュするかは設定されていません。

3. メソッドの結果をキャッシュする:@Cacheable

@Cacheableは、特定のメソッドの実行結果をキャッシュに保存するためのアノテーションです。最初にメソッドが呼ばれたとき、その結果がキャッシュされ、次回以降は同じ引数で呼ばれてもキャッシュから即座に結果が返されます。

使い方

import org.springframework.cache.annotation.Cacheable;

@Cacheable("items")
public Item getItemById(Long id) {
    System.out.println("データベースから取得中...");
    return itemRepository.findById(id); // データベースからアイテムを取得
}
  • ポイント
    • "items"はキャッシュの名前です。
    • 初回実行時は「データベースから取得中…」と表示されますが、2回目以降はキャッシュされた結果が返されるので表示されません。
    • メソッドの引数(ここではid)がキャッシュのキーとして使われます。

4. キャッシュを更新する:@CachePut

キャッシュにすでに保存されているデータを最新のものに更新したい場合は、@CachePutを使います。これは、メソッドが実行されるたびにキャッシュを上書きするため、常に最新のデータがキャッシュされるようになります。

使い方

import org.springframework.cache.annotation.CachePut;

@CachePut(value = "items", key = "#item.id")
public Item updateItem(Item item) {
    return itemRepository.save(item); // データベースの内容を更新
}
  • ポイント
    • "items"キャッシュの中でitem.idをキーにしてキャッシュが更新されます。
    • 毎回メソッドが実行され、結果がキャッシュに保存されます。

5. キャッシュを削除する:@CacheEvict

データが削除されたり変更されたりして、もうキャッシュが不要になった場合、@CacheEvictを使ってキャッシュを削除します。

使い方

import org.springframework.cache.annotation.CacheEvict;

@CacheEvict(value = "items", key = "#id")
public void deleteItem(Long id) {
    itemRepository.deleteById(id); // データベースから削除
}
  • ポイント
    • "items"キャッシュの中から、指定したキー(ここではid)に対応するキャッシュが削除されます。
    • allEntries = trueを設定すると、キャッシュのすべてのデータが削除されます。
@CacheEvict(value = "items", allEntries = true)
public void clearAllCache() {
    // すべてのキャッシュを削除
}

6. まとめ

Springのキャッシュ機能を使えば、アプリケーションのパフォーマンスを簡単に向上させることができます。以下のアノテーションをうまく活用しましょう:

  • @EnableCaching: キャッシュ機能を有効にする
  • @Cacheable: メソッドの結果をキャッシュし、再利用する
  • @CachePut: メソッド実行後にキャッシュを更新する
  • @CacheEvict: キャッシュを削除して最新のデータを維持する

これらを理解し活用すれば、あなたのSpringアプリケーションがより効率的に動作するようになります。データベースアクセスの回数を減らして、システム全体のパフォーマンスを最適化しましょう!

もっと詳しく知りたい方は、Spring公式ドキュメントを見てみてくださいね。

他の記事が見たい方はこちら!↓↓↓

タイトルとURLをコピーしました