接続モード
Redis は様々なセットアップで運用可能です。各動作モードには、次のセクションで説明する特定の構成が必要です。
Redis スタンドアロン
最も簡単に始める方法は、単一の Redis サーバーで Redis スタンドアロンを使用することです。
次の例に示すように、LettuceConnectionFactory
(Javadoc) または JedisConnectionFactory
(Javadoc) を構成します。
@Configuration
class RedisStandaloneConfiguration {
/**
* Lettuce
*/
@Bean
public RedisConnectionFactory lettuceConnectionFactory() {
return new LettuceConnectionFactory(new RedisStandaloneConfiguration("server", 6379));
}
/**
* Jedis
*/
@Bean
public RedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory(new RedisStandaloneConfiguration("server", 6379));
}
}
マスターへの書き込み、レプリカからの読み取り
Redis マスター / レプリカのセットアップ — 自動フェイルオーバーなし (自動フェイルオーバーについては、を参照してください: Sentinel ) — より多くのノードにデータを安全に保存できるだけではありません。また、Lettuce を使用して、マスターへの書き込みをプッシュしながらレプリカからデータを読み取ることもできます。次の例に示すように、LettuceClientConfiguration
を使用して、使用する読み取り / 書き込み戦略を設定できます。
@Configuration
class WriteToMasterReadFromReplicaConfiguration {
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
.readFrom(REPLICA_PREFERRED)
.build();
RedisStandaloneConfiguration serverConfig = new RedisStandaloneConfiguration("server", 6379);
return new LettuceConnectionFactory(serverConfig, clientConfig);
}
}
INFO コマンドを通じて非パブリックアドレスを報告する環境 (AWS を使用している場合など) では、RedisStandaloneConfiguration (Javadoc) ではなく RedisStaticMasterReplicaConfiguration (Javadoc) を使用します。RedisStaticMasterReplicaConfiguration は、個々のサーバー間での Pub/Sub メッセージの伝播がないため、Pub/Sub をサポートしていないことに注意してください。 |
Redis Sentinel
高可用性 Redis、Spring Data、Redis に対応するために、次の例に示すように、RedisSentinelConfiguration
(Javadoc) を使用した Redis Sentinel (英語) がサポートされています。
/**
* Lettuce
*/
@Bean
public RedisConnectionFactory lettuceConnectionFactory() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
.master("mymaster")
.sentinel("127.0.0.1", 26379)
.sentinel("127.0.0.1", 26380);
return new LettuceConnectionFactory(sentinelConfig);
}
/**
* Jedis
*/
@Bean
public RedisConnectionFactory jedisConnectionFactory() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
.master("mymaster")
.sentinel("127.0.0.1", 26379)
.sentinel("127.0.0.1", 26380);
return new JedisConnectionFactory(sentinelConfig);
}
プロパティの構成
|
場合によっては、センチネルの 1 つと直接対話する必要があります。RedisConnectionFactory.getSentinelConnection()
または RedisConnection.getSentinelCommands()
を使用すると、最初に構成されたアクティブな Sentinel にアクセスできます。
Redis クラスター
クラスターのサポートは、非クラスター化通信と同じ構成要素に基づいています。RedisConnection
の拡張である RedisClusterConnection
(Javadoc) は、Redis クラスターとの通信を処理し、エラーを Spring DAO 例外階層に変換します。RedisClusterConnection
インスタンスは RedisConnectionFactory
を使用して作成されますが、次の例に示すように、関連付けられた RedisClusterConfiguration
(Javadoc) を使用して設定する必要があります。
@Component
@ConfigurationProperties(prefix = "spring.redis.cluster")
public class ClusterConfigurationProperties {
/*
* spring.redis.cluster.nodes[0] = 127.0.0.1:7379
* spring.redis.cluster.nodes[1] = 127.0.0.1:7380
* ...
*/
List<String> nodes;
/**
* Get initial collection of known cluster nodes in format {@code host:port}.
*
* @return
*/
public List<String> getNodes() {
return nodes;
}
public void setNodes(List<String> nodes) {
this.nodes = nodes;
}
}
@Configuration
public class AppConfig {
/**
* Type safe representation of application.properties
*/
@Autowired ClusterConfigurationProperties clusterProperties;
public @Bean RedisConnectionFactory connectionFactory() {
return new LettuceConnectionFactory(
new RedisClusterConfiguration(clusterProperties.getNodes()));
}
}
プロパティの構成
|
初期構成は、ドライバーライブラリをクラスターノードの初期セットにポイントします。ライブクラスターの再構成による変更は、ネイティブドライバーにのみ保持され、構成に書き戻されることはありません。 |