SpingBoot之集成Redis集群

Posted 嘟嘟的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpingBoot之集成Redis集群相关的知识,希望对你有一定的参考价值。

一、安装Redis集群

安装步骤参照网上教程,Mac安装步骤参照https://github.com/muyl/mac-docker-redis-cluster

二、创建SpringBoot工程

file

  1. 创建Redis配置类

    package com.example.chapterredis.common.config;
    
    import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import redis.clients.jedis.HostAndPort;
    import redis.clients.jedis.JedisCluster;
    
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * @author tony
     */
    @Configuration
    public class RedisConfiguration {
    
        private static final Logger logger = LoggerFactory.getLogger(RedisConfiguration.class);
    
        @Value("${spring.redis.clusterNodes}")
        private String  clusterNodes;
        @Value("${spring.redis.password}")
        private String  auth;
        @Value("${spring.redis.pool.maxActive}")
        private Integer maxTotal;
        @Value("${spring.redis.pool.minIdle}")
        private Integer minIdle;
        @Value("${spring.redis.pool.maxIdle}")
        private Integer maxIdle;
        @Value("${spring.redis.pool.maxWait}")
        private Long    maxWaitMillis;
        @Value("${spring.redis.pool.commandTimeout}")
        private int     commandTimeout;
    
    
        @Bean
        public JedisCluster jedisCluster() {
            String[] serverArray = clusterNodes.split(",");
            Set<HostAndPort> nodes = new HashSet<>();
            for (String ipPort : serverArray) {
                String[] ipPortPair = ipPort.split(":");
                nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer.valueOf(ipPortPair[1].trim())));
            }
    
            if (!nodes.isEmpty()) {
                String password = getAuth(auth);
                logger.info("redis password:{}", password);
                GenericObjectPoolConfig pool = new GenericObjectPoolConfig();
                pool.setMaxTotal(maxTotal);
                pool.setMinIdle(minIdle);
                pool.setMaxIdle(maxIdle);
                pool.setMaxWaitMillis(maxWaitMillis);
                return new JedisCluster(nodes, commandTimeout, commandTimeout, 5, password, pool);
            }
            return null;
        }
    
        private String getAuth(String auth) {
            return "".equals(auth) ? null : auth;
        }
    }
    
    
  2. SpringBoot属性文件

    spring.redis.clusterNodes=localhost:7000,localhost:7001,localhost:7002,localhost:7003,localhost:7004,localhost:7005
    spring.redis.password=
    spring.redis.pool.maxActive=5
    spring.redis.pool.minIdle=5
    spring.redis.pool.maxIdle=1
    spring.redis.pool.maxWait=3000
    spring.redis.pool.commandTimeout=5000
    
  3. SpringBoot启动类

    package com.example.chapterredis;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class ChapterRedisApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ChapterRedisApplication.class, args);
        }
    }
    
    
  4. 测试类

    package com.example.chapterredis;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    import redis.clients.jedis.JedisCluster;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes={ChapterRedisApplication.class})
    public class ChapterRedisApplicationTests {
    
        @Autowired
        private JedisCluster jedisCluster;
    
    
        @Test
        public void test2() {
            jedisCluster.set("aaa","123");
            System.out.println(jedisCluster.get("aaa"));
        }
    
    }
    
    
三、工程源代码

https://gitee.com/shanksV/chapter-redis.git

比你优秀的人比你还努力,你有什么资格不去奋斗!!!

以上是关于SpingBoot之集成Redis集群的主要内容,如果未能解决你的问题,请参考以下文章

spingboot集成单元测试

spingboot集成jpa

如何利用redis来进行分布式集群系统的限流设计

Spingboot整合Redis,用注解(@Cacheable@CacheEvict@CachePut@Caching)管理缓存

SpringBoot集成Redis集群

Spring集成redis集群