对于最新的稳定版本,请使用 Spring Data Redis 3.3.1Spring中文文档

对于最新的稳定版本,请使用 Spring Data Redis 3.3.1Spring中文文档

Redis 可以在各种设置中操作。 每种操作模式都需要特定的配置,以下各节对此进行了说明。Spring中文文档

Redis 单机版

最简单的入门方法是将 Redis Standalone 与单个 Redis 服务器一起使用。Spring中文文档

配置 或 ,如以下示例所示:LettuceClientConfigurationJedisConnectionFactorySpring中文文档

@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 从副本读取数据,同时将写入推送到主服务器。 您可以使用 来设置要使用的读/写策略,如以下示例所示:LettuceClientConfigurationSpring中文文档

@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);
  }
}
对于通过命令报告非公有地址的环境(例如,在使用 AWS 时),请使用 而不是 .请注意,它不支持 Pub/Sub,因为缺少在各个服务器之间传播 Pub/Sub 消息。INFORedisStaticMasterReplicaConfigurationRedisStandaloneConfigurationRedisStaticMasterReplicaConfiguration
对于通过命令报告非公有地址的环境(例如,在使用 AWS 时),请使用 而不是 .请注意,它不支持 Pub/Sub,因为缺少在各个服务器之间传播 Pub/Sub 消息。INFORedisStaticMasterReplicaConfigurationRedisStandaloneConfigurationRedisStaticMasterReplicaConfiguration

Redis Sentinel(瑞迪斯哨兵酒店)

为了处理高可用性 Redis,Spring Data Redis 支持 Redis Sentinel,使用 ,如以下示例所示:RedisSentinelConfigurationSpring中文文档

/**
 * 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也可以用 定义,这样可以设置以下属性:PropertySourceSpring中文文档

配置属性
  • spring.redis.sentinel.master:主节点的名称。Spring中文文档

  • spring.redis.sentinel.nodes:以逗号分隔的主机:端口对列表。Spring中文文档

  • spring.redis.sentinel.username:使用 Redis Sentinel 进行身份验证时要应用的用户名(需要 Redis 6)Spring中文文档

  • spring.redis.sentinel.password:使用 Redis Sentinel 进行身份验证时要应用的密码Spring中文文档

有时,需要与其中一个哨兵直接互动。使用或授予您访问配置的第一个活动哨兵的权限。RedisConnectionFactory.getSentinelConnection()RedisConnection.getSentinelCommands()Spring中文文档

RedisSentinelConfiguration也可以用 定义,这样可以设置以下属性:PropertySourceSpring中文文档

配置属性
  • spring.redis.sentinel.master:主节点的名称。Spring中文文档

  • spring.redis.sentinel.nodes:以逗号分隔的主机:端口对列表。Spring中文文档

  • spring.redis.sentinel.username:使用 Redis Sentinel 进行身份验证时要应用的用户名(需要 Redis 6)Spring中文文档

  • spring.redis.sentinel.password:使用 Redis Sentinel 进行身份验证时要应用的密码Spring中文文档

Redis 集群

群集支持基于与非群集通信相同的构建基块。,是 的扩展,用于处理与 Redis 集群的通信,并将错误转换为 Spring DAO 异常层次结构。 实例是使用 创建的,必须与关联的 一起设置,如以下示例所示:RedisClusterConnectionRedisConnectionRedisClusterConnectionRedisConnectionFactoryRedisClusterConfigurationSpring中文文档

例 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也可以通过以下属性进行定义,并具有以下属性:PropertySourceSpring中文文档

配置属性
  • spring.redis.cluster.nodes:以逗号分隔的主机:端口对列表。Spring中文文档

  • spring.redis.cluster.max-redirects:允许的集群重定向数。Spring中文文档

初始配置将驱动程序库指向一组初始群集节点。实时群集重新配置导致的更改仅保留在本机驱动程序中,不会写回配置。

RedisClusterConfiguration也可以通过以下属性进行定义,并具有以下属性:PropertySourceSpring中文文档

配置属性
  • spring.redis.cluster.nodes:以逗号分隔的主机:端口对列表。Spring中文文档

  • spring.redis.cluster.max-redirects:允许的集群重定向数。Spring中文文档

初始配置将驱动程序库指向一组初始群集节点。实时群集重新配置导致的更改仅保留在本机驱动程序中,不会写回配置。