Couchbase SDK 3.x下使用默认Collection创建CouchBaseCacheManager的推荐方式
基于Couchbase SDK 3.x + Spring Data Cache使用默认集合创建CouchbaseCacheManager的实现方案
首先确保你的项目依赖适配版本:Spring Data Couchbase 4.x及以上版本原生支持Couchbase SDK 3.x,推荐使用Spring Boot 2.4+版本的官方Couchbase starter自动管理依赖版本,避免版本不兼容问题。
1. 基础连接配置
在application.yml(或application.properties)中添加Couchbase基础连接配置:
spring: couchbase: connection-string: couchbase://127.0.0.1 # 你的Couchbase集群地址 username: admin # 集群用户名 password: 123456 # 集群密码 bucket-name: default_bucket # 缓存使用的bucket名称
2. 自定义CouchbaseCacheManager配置类
如果你需要定制缓存的过期时间、前缀等规则,可以通过以下配置类实现,默认自动使用指定bucket的_default集合:
import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.couchbase.CouchbaseClientFactory; import org.springframework.data.couchbase.cache.CouchbaseCacheConfiguration; import org.springframework.data.couchbase.cache.CouchbaseCacheManager; import java.time.Duration; @Configuration @EnableCaching // 开启Spring Cache注解支持 public class CouchbaseCacheConfig { @Bean public CouchbaseCacheManager cacheManager(CouchbaseClientFactory couchbaseClientFactory) { // 全局默认缓存配置 CouchbaseCacheConfiguration defaultConfig = CouchbaseCacheConfiguration.defaultCacheConfig() // 全局缓存过期时间,按需调整 .entryTtl(Duration.ofMinutes(30)) // 可选:添加缓存key统一前缀,避免业务key冲突 .prefixCacheNameWith("business:cache:") // 可选:关闭null值缓存,按需开启防止缓存穿透 .disableCachingNullValues(); return CouchbaseCacheManager.builder(couchbaseClientFactory) // 注入全局默认配置 .cacheDefaults(defaultConfig) // 可选:给指定名称的缓存单独配置规则,以下示例给userCache单独设置1小时过期 .withCacheConfiguration("userCache", defaultConfig.entryTtl(Duration.ofHours(1))) .build(); } }
核心逻辑说明
- 代码中注入的
CouchbaseClientFactory是Spring Boot自动初始化的实例,会自动读取配置中的bucket信息,默认绑定该bucket的_default默认集合,无需额外指定collection参数即可使用默认集合存储缓存 - 如果没有定制缓存规则的需求,不需要手动写配置类:Spring Boot自动配置在检测到Couchbase依赖、
@EnableCaching注解开启时,会自动初始化使用默认集合的CouchbaseCacheManager实例
常见注意事项
- 如果你需要自定义缓存值的序列化规则,可在
CouchbaseCacheConfiguration中调用serializeValuesWith方法指定序列化器,比如使用Jackson序列化器替换默认的JDK序列化 - 确保配置的Couchbase用户拥有对应bucket默认集合的读写权限,否则会出现权限异常
- 缓存名称不要包含特殊字符,避免和Couchbase的key规则冲突
内容的提问来源于stack exchange,提问作者FoxRiver
相关产品推荐
相关产品推荐

