接続モード

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);
}

RedisSentinelConfiguration は RedisSentinelConfiguration.of(PropertySource) を通じて定義することもでき、これにより次のプロパティを選択できます。

プロパティの構成
  • spring.redis.sentinel.master: マスターノードの名前。

  • spring.redis.sentinel.nodes: ホスト: ポートのペアのコンマ区切りリスト。

  • spring.redis.sentinel.username: Redis で認証するときに適用するユーザー名 Sentinel (Redis 6 が必要です)

  • spring.redis.sentinel.password: Redis で認証するときに適用するパスワード Sentinel

  • spring.redis.sentinel.dataNode.username: Redis データノードで認証するときに適用するユーザー名

  • spring.redis.sentinel.dataNode.password: Redis データノードで認証するときに適用するパスワード

  • spring.redis.sentinel.dataNode.database: Redis データノードで認証するときに適用するデータベースインデックス

場合によっては、センチネルの 1 つと直接対話する必要があります。RedisConnectionFactory.getSentinelConnection() または RedisConnection.getSentinelCommands() を使用すると、最初に構成されたアクティブな Sentinel にアクセスできます。

Redis クラスター

クラスターのサポートは、非クラスター化通信と同じ構成要素に基づいています。RedisConnection の拡張である RedisClusterConnection (Javadoc) は、Redis クラスターとの通信を処理し、エラーを Spring DAO 例外階層に変換します。RedisClusterConnection インスタンスは RedisConnectionFactory を使用して作成されますが、次の例に示すように、関連付けられた RedisClusterConfiguration (Javadoc) を使用して設定する必要があります。

例 1: Redis クラスターの RedisConnectionFactory 構成のサンプル
@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()));
    }
}

RedisClusterConfiguration は RedisClusterConfiguration.of(PropertySource) を通じて定義することもでき、これにより次のプロパティを選択できます。

プロパティの構成
  • spring.redis.cluster.nodes: ホスト: ポートのペアのコンマ区切りのリスト。

  • spring.redis.cluster.max-redirects: 許可されたクラスターリダイレクトの数。

初期構成は、ドライバーライブラリをクラスターノードの初期セットにポイントします。ライブクラスターの再構成による変更は、ネイティブドライバーにのみ保持され、構成に書き戻されることはありません。