【Spring连载】使用Spring Data访问Redis(三)----连接模式

【Spring连载】使用Spring Data访问Redis(三)----连接模式Connection Modes


Redis可以在各种设置中运行。每种操作模式都需要特定的配置,下面几节将对此进行解释。

一、Redis Standalone

最简单的入门方法是使用单机Redis,配置LettuceClientConfiguration或JedisConnectionFactory,如下例所示:

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

二、向Master写入,从Replica读取

Redis的Master/Replica设置——没有自动failover(关于自动故障转移,请参见Sentinel)——不仅允许数据安全地存储在更多的节点上。通过使用Lettuce,它还允许从replicas读取数据,同时将写操作推送到master。使用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命令报告非公共地址的环境(例如,当使用阿里云时),请使用RedisStaticMasterReplicaConfiguration而不是RedisStandaloneConfiguration。请注意,RedisStaticMasterReplicaConfiguration不支持Pub/Sub。

三、Redis Sentinel

为了处理Redis高可用性, Spring Data Redis支持Redis Sentinel,使用RedisSentinelConfiguration,如下例所示:

/**
 * 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也可以用PropertySource来定义,它允许你设置以下属性:

  • spring.redis.sentinel.master:主节点的名称。
  • spring.redis.sentinel.nodes:以逗号分隔的host:port对列表。
  • spring.redis.sentinel.username:使用Redis Sentinel进行身份验证时应用的用户名(需要Redis 6)
  • spring.redis.sentinel.password:使用Redis Sentinel进行身份验证时应用的密码

有时,需要与其中一个Sentinel直接互动。使用RedisConnectionFactory.getSentinelConnection()或RedisConnection.getSentinelCommands()可以访问配置的第一个active Sentinel。

四、Redis Cluster

集群支持与非集群通信基于相同的构建块。RedisClusterConnection是RedisConnection的子接口,它处理与Redis集群的通信,并将错误转换到Spring DAO异常层次结构中。RedisClusterConnection实例是使用RedisConnectionFactory创建的,必须使用关联的RedisClusterConfiguration进行设置,如下例所示:
示例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也可以通过PropertySource定义,并具有以下属性:

  • spring.redis.cluster.nodes:逗号分隔的host:port对列表。
  • spring.redis.cluster.max-redirects:允许的集群重定向数。

初始配置将driver库指向一组初始集群节点。实时集群重新配置所产生的更改仅保留在native driver中,不会写回配置中。

最近更新

  1. TCP协议是安全的吗?

    2024-02-01 05:00:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-01 05:00:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-01 05:00:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-01 05:00:02       18 阅读

热门阅读

  1. 西方网络安全人才培养的挑战及对策

    2024-02-01 05:00:02       32 阅读
  2. kubectl 命令自动补全

    2024-02-01 05:00:02       32 阅读
  3. 项目经理作为“夹心饼干”,如何夹缝求生?

    2024-02-01 05:00:02       31 阅读
  4. SpringBoot-基础

    2024-02-01 05:00:02       21 阅读
  5. springboot自定义starter

    2024-02-01 05:00:02       30 阅读