Redis可以在各种设置中操作。每个操作模式都需要特定的配置,这些配置将在以下部分中进行解释。
一、Redis 单机模式
最简单的入门方法是将Redis Standalone与单个Redis服务器一起使用,
配置LettuceConnectionFactory或JedisConnectionFactor,如下例所示:
@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从副本中读取数据,同时将写入推送到主服务器。您可以使用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);
}
}
三、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);
}
RedisSentelConfiguration也可以通过RedisSentilConfiguration.of(PropertySource)定义,它允许您选取以下属性:
配置属性
- spring.redis.sentinnel.master:主节点的名称。
- spring.redis.sentinnel.nodes:主机:端口对的逗号分隔列表。
- spring.redis.sentinnel.username:使用redis sentinel进行身份验证时要应用的用户名(需要redis 6)
- spring.redis.sentinnel.password:使用redis sentinel进行身份验证时应用的密码
- spring.redis.sentinnel.dataNode.username:使用redis数据节点进行身份验证时要应用的用户名
- spring.redis.sentinnel.dataNode.password:使用redis数据节点进行身份验证时要应用的密码
- spring.redis.sentinnel.dataNode.database:redis数据节点身份验证时应用的数据库索引
有时,需要与其中一个哨兵直接互动。使用RedisConnectionFactory.getSentinelConnection()或RedisConnection。getSentinelCommands()可以访问配置的第一个活动Sentinel。
四、Redis Cluster
集群支持基于与非集群通信相同的构建块。RedisClusterConnection是RedisConnection的扩展,它处理与Redis Cluster的通信,并将错误转换为Spring DAO异常层次结构。RedisClusterConnection实例是使用RedisConnectionFactory创建的,必须使用关联的RedisClisterConfiguration进行设置,如下例所示:
@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也可以通过RedisClisterConfiguration.of(PropertySource)定义,它允许您选取以下属性:
配置属性
- spring.redis.cluster.nodes:主机:端口对的逗号分隔列表。
- spring.redis.cluster.max-redirects:允许的集群重定向数。