网站建设教程自学,北京vi设计公司 四方之志,邯郸之窗官网,秀主题wordpress【Spring连载】使用Spring Data访问Redis#xff08;三#xff09;----连接模式Connection Modes 一、Redis Standalone二、向Master写入#xff0c;从Replica读取三、Redis Sentinel四、Redis Cluster Redis可以在各种设置中运行。每种操作模式都需要特定的配置#xff0c… 【Spring连载】使用Spring Data访问Redis三----连接模式Connection Modes 一、Redis Standalone二、向Master写入从Replica读取三、Redis Sentinel四、Redis Cluster Redis可以在各种设置中运行。每种操作模式都需要特定的配置下面几节将对此进行解释。 一、Redis Standalone
最简单的入门方法是使用单机Redis配置LettuceClientConfiguration或JedisConnectionFactory如下例所示:
Configuration
class RedisStandaloneConfiguration {/*** Lettuce*/Beanpublic RedisConnectionFactory lettuceConnectionFactory() {return new LettuceConnectionFactory(new RedisStandaloneConfiguration(server, 6379));}/*** Jedis*/Beanpublic RedisConnectionFactory jedisConnectionFactory() {return new JedisConnectionFactory(new RedisStandaloneConfiguration(server, 6379));}
}二、向Master写入从Replica读取
Redis的Master/Replica设置——没有自动failover(关于自动故障转移请参见Sentinel)——不仅允许数据安全地存储在更多的节点上。通过使用Lettuce它还允许从replicas读取数据同时将写操作推送到master。使用LettuceClientConfiguration命令可以设置要使用的读写策略示例如下:
Configuration
class WriteToMasterReadFromReplicaConfiguration {Beanpublic 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 6spring.redis.sentinel.password使用Redis Sentinel进行身份验证时应用的密码
有时需要与其中一个Sentinel直接互动。使用RedisConnectionFactory.getSentinelConnection()或RedisConnection.getSentinelCommands()可以访问配置的第一个active Sentinel。
四、Redis Cluster
集群支持与非集群通信基于相同的构建块。RedisClusterConnection是RedisConnection的子接口它处理与Redis集群的通信并将错误转换到Spring DAO异常层次结构中。RedisClusterConnection实例是使用RedisConnectionFactory创建的必须使用关联的RedisClusterConfiguration进行设置如下例所示 示例1Redis集群的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* ...*/ListString nodes;/*** Get initial collection of known cluster nodes in format {code host:port}.** return*/public ListString getNodes() {return nodes;}public void setNodes(ListString 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中不会写回配置中。