跳到主要内容

连接模式

DeepSeek V3 中英对照 Connection Modes

Redis 可以在多种设置下运行。每种运行模式都需要特定的配置,这些配置将在以下部分中进行解释。

Redis 单机模式 {#redis:standalone}

最简单的入门方法是使用 Redis 单机模式,即单个 Redis 服务器,

配置 LettuceConnectionFactoryJedisConnectionFactory,如下例所示:

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

写入主节点,从副本读取 {#redis:write-to-master-read-from-replica}

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);
}
}
java
提示

对于通过 INFO 命令报告非公开地址的环境(例如,在使用 AWS 时),请使用 RedisStaticMasterReplicaConfiguration 而不是 RedisStandaloneConfiguration。请注意,由于在各个服务器之间缺少 Pub/Sub 消息传播,RedisStaticMasterReplicaConfiguration 不支持 Pub/Sub。

Redis Sentinel {#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);
}
java
提示

RedisSentinelConfiguration 也可以通过 RedisSentinelConfiguration.of(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 认证时使用的密码。

  • spring.redis.sentinel.dataNode.username: 与 Redis 数据节点认证时使用的用户名。

  • spring.redis.sentinel.dataNode.password: 与 Redis 数据节点认证时使用的密码。

  • spring.redis.sentinel.dataNode.database: 与 Redis 数据节点认证时使用的数据库索引。

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

Redis 集群

集群支持 基于与非集群通信相同的构建块。RedisClusterConnectionRedisConnection 的扩展,它处理与 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()));
}
}
java
提示

RedisClusterConfiguration 也可以通过 RedisClusterConfiguration.of(PropertySource) 来定义,这允许你获取以下属性:

配置属性

  • spring.redis.cluster.nodes: 以逗号分隔的 host:port 对列表。

  • spring.redis.cluster.max-redirects: 允许的集群重定向次数。

备注

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