对于最新的稳定版本,请使用 Spring Data Redis 4.0.4spring-doc.cadn.net.cn

连接模式

Redis 可以在多种配置下运行。 每种运行模式都需要特定的配置,具体内容将在以下章节中说明。spring-doc.cadn.net.cn

Redis 独立模式

最简单的入门方式是使用单个 Redis 服务器的 Redis 单机模式,spring-doc.cadn.net.cn

@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 主从(Master/Replica)配置——不包含自动故障转移(关于自动故障转移,请参见:Sentinel)——不仅允许将数据安全地存储在更多节点上, 还可以通过使用 Lettuce,从副本(replica)读取数据,同时将写操作发送到主节点(master)。 您可以使用 LettuceClientConfiguration 来设置要使用的读/写策略,如下例所示:spring-doc.cadn.net.cn

@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 时),请使用 RedisStaticMasterReplicaConfiguration 代替 RedisStandaloneConfiguration。请注意,由于缺乏跨独立服务器的 Pub/Sub 消息传播,RedisStaticMasterReplicaConfiguration 不支持 Pub/Sub。

Redis 哨兵

为了处理高可用 Redis,Spring Data Redis 支持 Redis Sentinel,使用 RedisSentinelConfiguration,如下示例所示:spring-doc.cadn.net.cn

/**
 * 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-doc.cadn.net.cn

配置属性
  • spring.redis.sentinel.master:主节点的名称。spring-doc.cadn.net.cn

  • spring.redis.sentinel.nodes:以逗号分隔的 host:port 对列表。spring-doc.cadn.net.cn

  • spring.redis.sentinel.username:在与 Redis Sentinel 进行身份验证时使用的用户名(需要 Redis 6)spring-doc.cadn.net.cn

  • spring.redis.sentinel.password:在与 Redis Sentinel 进行身份验证时使用的密码spring-doc.cadn.net.cn

  • spring.redis.sentinel.dataNode.username:与 Redis 数据节点进行身份验证时要使用的用户名spring-doc.cadn.net.cn

  • spring.redis.sentinel.dataNode.password:与 Redis 数据节点进行身份验证时使用的密码spring-doc.cadn.net.cn

  • spring.redis.sentinel.dataNode.database:与 Redis 数据节点进行身份验证时要使用的数据库索引spring-doc.cadn.net.cn

有时需要直接与其中一个 Sentinel 进行交互。使用 RedisConnectionFactory.getSentinelConnection()RedisConnection.getSentinelCommands() 可以访问所配置的第一个活跃的 Sentinel。spring-doc.cadn.net.cn

Redis 集群

集群支持基于与非集群通信相同的构建模块。RedisClusterConnectionRedisConnection的扩展,用于处理与 Redis 集群的通信,并将错误转换为 Spring DAO 异常层次结构。 RedisClusterConnection实例通过RedisConnectionFactory创建,该实例必须配置关联的RedisClusterConfiguration,如下示例所示:spring-doc.cadn.net.cn

示例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-doc.cadn.net.cn

配置属性
初始配置将驱动程序库指向一组初始的集群节点。由实时集群重新配置所产生的变更仅保留在原生驱动程序中,不会写回配置文件。