缓存
本章描述了对缓存和 @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.;
}
如果你多次运行该方法,你会看到首先发生一个集合操作,随后是多个获取操作,并且没有休眠时间(这模拟了昂贵的执行)。你可以存储任何你想要的东西,如果是 JSON,当然可以通过视图访问它,并在 Web 界面中查看。
请注意,要使用 cache.clear() 或 cache.invalidate(),桶必须具有主键。