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