キャッシング
この章では、キャッシュと @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() を使用するには、バケットに主キーが必要であることに注意してください。