【发布时间】:2020-11-12 18:48:51
【问题描述】:
我有一个带有 Redis Sentinel 缓存的 Spring Boot (2.3.1.RELEASE) 应用程序。 这是我的 Sentinel 连接配置:
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
.master(redisProperties.getSentinel().getMaster());
redisProperties.getSentinel().getNodes().forEach(s -> sentinelConfig.sentinel(s, redisProperties.getPort()));
sentinelConfig.setPassword(RedisPassword.of(redisProperties.getPassword()));
return new LettuceConnectionFactory(sentinelConfig);
}
这是我的缓存管理器配置:
@Bean
public RedisCacheManager cacheManager() {
Map<String, RedisCacheConfiguration> cacheConfigs = new HashMap<>();
cacheConfigs.put("cache1", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(ttlMinutes)));
cacheConfigs.put("cache2", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(ttlMinutes)));
return RedisCacheManager.builder(redisConnectionFactory())
.cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(ttlMinutes)))
.withInitialCacheConfigurations(cacheConfigs)
.transactionAware()
.build();
}
从缓存的角度来看,一切正常。
但是,如果我打开 io.lettuce.core.protocol.CommandHandler 中的调试日志,我会看到它始终连接到同一个节点(主节点)。我可以通过查看节点上的日志来确认。
我在网上看到的所有地方,这似乎都是正确的配置。
这让我想到了我的问题:
- 是否可以将 Spring 缓存抽象配置为仅使用主节点进行写入,使用从节点进行读取?
这种期望是否有效?或者这就是应该使用 Sentinel 的方式(所有请求都转到 master)?
【问题讨论】:
标签: java spring redis redis-sentinel