1. 概要

Caffeine cache は、Java用の高性能キャッシュライブラリです。 この短いチュートリアルでは、Spring Boot での使用方法を説明します。

2. 依存関係

CaffeineとSpringBootの使用を開始するには、最初にspring-boot-starter-cachecaffeineの依存関係を追加します。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
    </dependency>
</dependencies>

これらは、Caffeineライブラリとともに基本のSpringキャッシングサポートをインポートします。

3. 構成

次に、SpringBootアプリケーションでキャッシュを構成する必要があります。

まず、カフェインBeanを作成します。 これは、有効期限、キャッシュサイズ制限などのキャッシュ動作を制御する主な構成です

@Bean
public Caffeine caffeineConfig() {
    return Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.MINUTES);
}

次に、Spring CacheManagerインターフェースを使用して別のBeanを作成する必要があります。 Caffeineは、このインターフェイスの実装を提供します。これには、上記で作成したCaffeineオブジェクトが必要です。

@Bean
public CacheManager cacheManager(Caffeine caffeine) {
    CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();
    caffeineCacheManager.setCaffeine(caffeine);
    return caffeineCacheManager;
}

最後に、@EnableCachingアノテーションを使用してSpringBootでキャッシュを有効にする必要があります。 これは、アプリケーションの任意の@Configurationクラスに追加できます。

4. 例

キャッシングを有効にし、Caffeine を使用するように構成した状態で、Spring Boot アプリケーションで キャッシング を使用する方法の例をいくつか見てみましょう。

Spring Bootでキャッシュを使用する主な方法は、@Cacheableアノテーションを使用することです。 このアノテーションは、Spring Beanの任意のメソッド(またはクラス全体)で機能します。 これは、登録されたキャッシュマネージャーに、メソッド呼び出しの結果をキャッシュに保存するように指示します。

一般的な使用法は、サービスクラス内です。

@Service
public class AddressService {
    @Cacheable
    public AddressDTO getAddress(long customerId) {
        // lookup and return result
    }
}

パラメータなしで@Cacheableアノテーションを使用すると、Springはキャッシュとキャッシュキーの両方にデフォルト名を使用するように強制されます。

アノテーションにいくつかのパラメーターを追加することで、これらの動作の両方をオーバーライドできます。

@Service
public class AddressService {
    @Cacheable(value = "address_cache", key = "customerId")
    public AddressDTO getAddress(long customerId) {
        // lookup and return result
    }
}

上記の例では、Springにaddress_cacheという名前のキャッシュとcustomerId引数をキャッシュキーに使用するように指示しています。

最後に、キャッシュマネージャー自体がSpring Beanであるため、他のBeanに自動配線して、直接操作することもできます

@Service
public class AddressService {

    @Autowired
    CacheManager cacheManager;

    public AddressDTO getAddress(long customerId) {
        if(cacheManager.containsKey(customerId)) {
            return cacheManager.get(customerId);
        }
        
        // lookup address, cache result, and return it
    }
}

5. 結論

このチュートリアルでは、アプリケーションでキャッシュを使用する方法の例とともに、Caffeine キャッシュを使用するように Spring Boot を構成する方法を見てきました。

そしてもちろん、すべてのコード例はGitHubにあります。