此版本仍处于开发阶段,尚未被视为稳定版本。如需使用最新稳定版本,请采用 Spring Data Couchbase 6.0.4spring-doc.cadn.net.cn

缓存

本章介绍了对缓存和 @Cacheable 的额外支持。spring-doc.cadn.net.cn

配置与使用

从技术上讲,缓存不属于 spring-data 的一部分,而是直接在 spring core 中实现的。spring-data 包中的大多数数据库实现无法支持 @Cacheable,因为不可能存储任意数据。spring-doc.cadn.net.cn

Couchbase 同时支持二进制数据和 JSON 数据,因此您可以从同一个数据库中获取这两种数据。spring-doc.cadn.net.cn

要使该功能生效,您需要添加 @EnableCaching 注解并配置 cacheManager Bean:spring-doc.cadn.net.cn

示例 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();
  }

随后可以在 @Cacheable 注解中使用 persistent 标识符来指定要使用的缓存管理器(您可以配置多个)。spring-doc.cadn.net.cn

一旦配置完成,您就可以使用 @Cacheable 注解标注每个方法,以便将其透明地缓存到您的 Couchbase 存储桶中。您还可以自定义键的生成方式。spring-doc.cadn.net.cn

示例 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 UI 中查看。spring-doc.cadn.net.cn

请注意,要使用 cache.clear() 或 cache.invalidate(),存储桶必须具有主键。spring-doc.cadn.net.cn