キャッシング

この章では、キャッシュと @Cacheable の追加サポートについて説明します。

構成と使用箇所

技術的には、キャッシュは spring-data の一部ではありませんが、Spring コアに直接実装されています。spring-data パッケージ内のほとんどのデータベース実装は、任意のデータを保存できないため、@Cacheable をサポートできません。

Couchbase はバイナリデータと JSON データの両方をサポートしているため、同じデータベースから両方を取得できます。

これを機能させるには、@EnableCaching アノテーションを追加し、cacheManager Bean を構成する必要があります。

例 1: AbstractCouchbaseConfiguration キャッシュ用
@Configuration
@EnableCaching
public class Config extends AbstractCouchbaseConfiguration {
    // general methods

  @Bean
  public CouchbaseCacheManager cacheManager(CouchbaseTemplate couchbaseTemplate) throws Exception {
  CouchbaseCacheManager.CouchbaseCacheManagerBuilder builder = CouchbaseCacheManager.CouchbaseCacheManagerBuilder
      .fromConnectionFactory(couchbaseTemplate.getCouchbaseClientFactory());
    builder.withCacheConfiguration("mySpringCache", CouchbaseCacheConfiguration.defaultCacheConfig());
    return builder.build();
  }

persistent 識別子を @Cacheable アノテーションで使用して、使用するキャッシュマネージャーを識別できます (複数のキャッシュマネージャーを構成できます)。

セットアップが完了すると、すべてのメソッドに @Cacheable アノテーションを付けて、couchbase バケットに透過的にキャッシュできます。キーの生成方法をカスタマイズすることもできます。

例 2: キャッシュの例
@Cacheable(value="persistent", key="'longrunsim-'+#time")
public String simulateLongRun(long time) {
    try {
        Thread.sleep(time);
    } catch(Exception ex) {
        System.out.println("This shouldnt happen...");
    }
    return "I've slept " + time + " miliseconds.;
}

このメソッドを複数回実行すると、最初に set オペレーションが発生し、その後に複数の get オペレーションが発生し、スリープ時間がないことがわかります (コストのかかる実行を装っている)。必要なものは何でも保存できます。JSON の場合は、ビューを通じてアクセスし、Web UI で確認できます。

cache.clear() または cache.invalidate() を使用するには、バケットに主キーが必要であることに注意してください。