`

spring boot配置同时支持单机和集群redis

    博客分类:
  • java
阅读更多

正式环境都是用集群版redis,开发用的单机版,领导要求通过配置文件来确定是单机还是集群,由于单机版已经实现了,那么准备就在单机版基础上进行开发,然后发现spring boot1.2版本已经比较老,就升级版本,由于升级了spring boot版本,对应其他配置也进行了修改。最终修改的配置如下:

 

pom.xml

<properties>
	<java.version>1.8</java.version>
	<spring.version>4.3.9.RELEASE</spring.version>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.8.RELEASE</version>
</parent>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
       <!--原来是spring-boot-starter-redis-->
</dependency>
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.9.0</version>
</dependency>

 redis.properties文件基本没有变:

# REDIS (RedisProperties) 
# Redis服务器地址(集群用逗号分隔)
#spring.redis.host=xxx.xxx.xxx.xxx:xxxxx
spring.redis.host=xxx.xxx.xxx.xxx:xxxxx,xxx.xxx.xxx.xxx:xxxxx
# Redis服务器连接密码(默认为空)
spring.redis.password=123456
# 连接超时时间(毫秒)
spring.redis.timeout=2000
spring.redis.max-redirects=8

 注意:host变成ip:port,集群多个ip和端口用“,”分割,为什么这样写spring框架中RedisClusterConfiguration类中就是这样分割。看一下源代码:

//RedisClusterConfiguration类:
private static final String REDIS_CLUSTER_NODES_CONFIG_PROPERTY = "spring.redis.cluster.nodes";  //默认是配置这样的
……
public RedisClusterConfiguration(PropertySource<?> propertySource) {

	notNull(propertySource, "PropertySource must not be null!");

	this.clusterNodes = new LinkedHashSet<RedisNode>();
        //有spring.redis.cluster.nodes配置,分割这个属性,添加node
	if (propertySource.containsProperty(REDIS_CLUSTER_NODES_CONFIG_PROPERTY)) {
		appendClusterNodes(commaDelimitedListToSet(propertySource.getProperty(REDIS_CLUSTER_NODES_CONFIG_PROPERTY)
				.toString()));
	 }
         ……
	}
//函数会调用,用","分割:
public static String[] commaDelimitedListToStringArray(String str) {
	return delimitedListToStringArray(str, ",");
}
//然后用":"分割组装成RedisNode
private void appendClusterNodes(Set<String> hostAndPorts) {

	for (String hostAndPort : hostAndPorts) {
		addClusterNode(readHostAndPortFromString(hostAndPort));
	}
}

private RedisNode readHostAndPortFromString(String hostAndPort) {
	String[] args = split(hostAndPort, ":");

	notNull(args, "HostAndPort need to be seperated by  ':'.");
	isTrue(args.length == 2, "Host and Port String needs to specified as host:port");
	return new RedisNode(args[0], Integer.valueOf(args[1]).intValue());
}

 在cacheconfig类中变成这样的:

@Bean
	public RedisClusterConfiguration getClusterConfiguration() {
		if (host.split(",").length > 1) {
                        //如果是host是集群模式的才进行以下操作
			Map<String, Object> source = new HashMap<String, Object>();

			source.put("spring.redis.cluster.nodes", host);

			source.put("spring.redis.cluster.timeout", timeout);

			source.put("spring.redis.cluster.max-redirects", redirects);
                        //在源码的注释中可以看到是这样配置,以为这样写就不用在Connection中不用在认证,后来确定太天真了
source.put("spring.redis.cluster.password", password);

			return new RedisClusterConfiguration(new MapPropertySource("RedisClusterConfiguration", source));
		} else {
			return null;
		}

	}

	@Bean
	public JedisConnectionFactory jedisConnectionFactory() {
		if (host.split(",").length == 1) {
			JedisConnectionFactory factory = new JedisConnectionFactory();
			factory.setHostName(host.split(":")[0]);
			factory.setPort(Integer.valueOf(host.split(":")[1]));
			factory.setPassword(password);
			factory.setTimeout(timeout);
			return factory;
		} else {
			JedisConnectionFactory jcf = new JedisConnectionFactory(getClusterConfiguration());
			jcf.setPassword(password); //集群的密码认证
			return jcf;
		}

	}
//这样改造之后,redisTemplate模板就不用改了,之前写的redisUtil类也不用变了

 

分享到:
评论

相关推荐

    springboot根据配置实现单机与集群redis的切换

    通过配置文件实现连接单机redis或集群redis demo,实现开发时使用单机redis,线上使用集群redis

    spring boot+redis单机与集群.zip

    本压缩包文件包含的是关于如何在Spring Boot项目中集成和配置Redis,以及如何设置Redis的单机和集群模式的教程或示例代码。 首先,让我们详细了解一下Spring Boot集成Redis的基础知识。Spring Boot提供了自动配置的...

    springcloud部署redis集群

    配置SpringCloud以连接Redis集群,你需要在Spring Boot的`application.yml`或`application.properties`中设置Redis连接信息。由于是集群模式,因此需要指定`cluster.nodes`属性,如下所示: ```yaml spring: data:...

    springboot整合redis集群零配置

    在Spring Boot 2.1及以上版本中,我们可以利用`spring.redis.cluster.nodes`属性来实现零配置连接到Redis集群,只需将所有集群节点的IP和端口以逗号分隔的形式列出即可,如: ```properties spring.redis.cluster....

    spring boot+jpa+redis集群

    集成Spring Boot、JPA和Redis集群的过程大致如下: 1. 配置Spring Boot:在`application.yml`或`application.properties`文件中,我们需要配置数据库连接信息(如URL、用户名和密码)以及Redis的相关配置,包括集群...

    spring-boot-redis(单机、集群、哨兵)

    本文将深入探讨如何在 Spring Boot 应用中整合 Redis,包括单机、集群和哨兵三种模式。 **单机版Redis整合** 1. **添加依赖**: 在 `pom.xml` 文件中,添加 Spring Boot 对 Redis 的支持,通常会引入 `spring-boot-...

    spring + redis集群

    1. Spring Boot应用配置,启用Redis连接池和集群配置。 2. Redis工具类,封装了基本的Redis操作,如存取对象、哈希操作等。 3. 示例实体类,演示如何存储和检索对象。 4. Maven配置,确保所有依赖正确导入并能正常...

    springboot集成redis集群,redis安装包配置

    在`pom.xml`或`build.gradle`文件中,你需要包含Spring Data Redis库和Spring Boot的Redis starter。对于Maven项目,可以在`pom.xml`中添加以下依赖: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;...

    springboot+redis单机与集群

    配置Spring Boot连接Redis集群需要指定多个节点的地址,并启用集群模式。 在集群模式下,Spring Boot应用会根据数据的哈希槽分布自动将操作路由到相应的节点。需要注意的是,Redis集群不支持所有的数据类型,例如,...

    SpringBoot集成Redis集群

    这些参数的配置将影响Redis集群的行为和性能。 ### 第三步:注册配置 在SpringBoot 2.X中,需要注册Redis集群的配置,以便在应用程序中使用。可以通过使用@Configuration和@Bean注解来注册Redis集群的配置。 ### ...

    搭建springboot与redis集群关联操作.doc

    本文档主要讲解如何搭建 Spring Boot 与 Redis 集群的关联操作,包括搭建 Redis 集群、Spring Boot 配置调用 Redis、实例代码操作和运行结果展示。同时,也会涉及到 Redis 的三种模式:单机模式、哨兵模式和集群模式...

    springboot_redis

    7. **Sentinel或Cluster支持**:如果需要高可用性,可以配置Spring Boot连接Redis Sentinel集群或者直接连接Redis Cluster。 综上所述,"springboot_redis"项目是一个实践教程,演示了如何在Spring Boot应用中配置...

    SpringBoot整合Redis实例

    本教程将详细介绍如何在Spring Boot项目中整合Redis,涵盖单机版、Redis集群以及Redis Sentinel哨兵模式。 首先,我们要理解Spring Boot与Redis的基本整合。Spring Boot提供了自动配置功能,通过添加`spring-boot-...

    Spring Boot + Spring Session + Redis

    标题 "Spring Boot + Spring Session + Redis" 涉及到的是在Java开发中,使用Spring Boot框架集成Spring Session和Redis来实现会话管理的技术方案。这个解决方案主要解决分布式系统中的session共享问题,使得用户在...

    Spring Boot和Hazelcast使用详解

    Spring Boot和Hazelcast使用详解 Spring Boot和Hazelcast使用详解是指如何将Hazelcast集成到Spring Boot项目中,以提高...但是,需要合理配置Hazelcast实例和依赖项,确保Hazelcast的版本与Spring Boot的版本相兼容。

    Spring Boot整合Redis做集中式缓存

    在一些要求高一致性(任何数据变化都能及时的被查询到)的系统和应用中,就不能再使用EhCache来解决了,这个时候使用集中式缓存是个不错的选择,因此本文将介绍如何在Spring Boot的缓存支持中使用Redis进行数据缓存...

    redis和spring整合,redis集群

    通过以上步骤,你可以成功地将 Redis 整合到 Spring 应用中,并实现对 Redis 集群的支持。这将帮助你的应用程序更好地利用 Redis 的高性能特性,同时具备良好的扩展性。记得在实际应用中根据具体需求调整配置,确保...

    教程合集:Spring Boot、Spring Cloud、MySQL、Redis、Elast-learning.zip

    Spring Cloud则是一个基于Spring Boot实现的云应用开发工具集,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)...

    springboot整合redis集群(三种方式)源码

    springboot整合redis集群(三种方式)源码

    spring-boot mybaits spring security redis

    根据提供的标题、描述、标签以及部分链接内容,我们可以推断出该主题主要涉及Spring Boot、MyBatis、Spring Security和Redis等技术栈的综合运用。接下来,我们将详细探讨这些技术的关键知识点及其在实际项目中的应用...

Global site tag (gtag.js) - Google Analytics