连接模式
Redis 可以在各种设置中运行。 每种操作模式都需要特定的配置,以下各节将对此进行说明。
Redis 独立版
最简单的入门方法是将 Redis Standalone 与单个 Redis 服务器一起使用。
配置 LettuceConnectionFactory
或 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));
}
}
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);
}
}
对于通过命令报告非公有地址的环境(例如,使用 AWS 时),请使用 RedisStaticMasterReplicaConfiguration 而不是 RedisStandaloneConfiguration 。请注意,由于缺少跨单个服务器的 Pub/Sub 消息传播,因此不支持 Pub/Sub。INFO RedisStaticMasterReplicaConfiguration |
Redis 哨兵
为了处理高可用性 Redis,Spring Data Redis 使用 RedisSentinelConfiguration
支持 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);
}
配置属性
|
有时,需要与其中一个哨兵直接互动。使用 或 可以访问配置的第一个活动 Sentinel。RedisConnectionFactory.getSentinelConnection()
RedisConnection.getSentinelCommands()
Redis 集群
群集支持基于与非群集通信相同的构建块。RedisClusterConnection
是 的扩展,用于处理与 Redis Cluster 的通信,并将错误转换为 Spring DAO 异常层次结构。 实例是使用 创建的,必须使用关联的 RedisClusterConfiguration
进行设置,如以下示例所示:RedisConnection
RedisClusterConnection
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()));
}
}
配置属性
|
初始配置将驱动程序库指向一组初始群集节点。实时集群重新配置导致的更改仅保留在本机驱动程序中,不会写回配置。 |