• Redis Cluster with SpringBoot


    前提:

    按照 https://www.cnblogs.com/luffystory/p/12081074.html 配置好Redis Cluster in Ubuntu

    按照如下结构搭建项目结构:

    POM

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.1.RELEASE</version>
            <relativePath /> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.study</groupId>
        <artifactId>SpringBootTest_RedisCluster</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>SpringBootTest-2</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>io.lettuce</groupId>
                        <artifactId>lettuce-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
            </dependency>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
            </dependency>
    
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    package com.app;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }
    package com.app;
    
    import java.io.Serializable;
    
    public class Book implements Serializable {
    
        private String name;
        private String author;
        
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAuthor() {
            return author;
        }
        public void setAuthor(String author) {
            this.author = author;
        }
        
        public String toString(){
        return String.format("Book: { name: %s, author: %s }", name,author);
        }
        
        
    }
    package com.app;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.data.redis.core.ValueOperations;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class BookController {
    
        @Autowired
        RedisTemplate<String, Book> redisTemplate;
        
        @Autowired
        StringRedisTemplate stringRedisTemplate;
        
        @GetMapping("/test1")
        public void test() {
        ValueOperations<String,Book> ops = redisTemplate.opsForValue();
        Book book = new Book();
        book.setName("水浒传");
        book.setAuthor("施耐庵");
        ops.set("b1", book);
        System.out.println(ops.get("b1"));
        
        ValueOperations<String,String> ops2 = stringRedisTemplate.opsForValue();
        ops2.set("Hello", "World");
        System.out.println(ops2.get("Hello"));
        }
    }
    package com.app;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.RedisClusterConfiguration;
    import org.springframework.data.redis.connection.RedisNode;
    import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    import redis.clients.jedis.JedisPoolConfig;
    
    @Configuration
    @ConfigurationProperties("spring.redis.cluster")
    public class RedisConfig {
    
        List<Integer> ports;
        String host;
        JedisPoolConfig poolConfig;
        
        @Bean
        RedisClusterConfiguration redisClusterConfiguarion() {
        RedisClusterConfiguration configuration = new RedisClusterConfiguration();
        List<RedisNode> nodes = new ArrayList<>();
        for(Integer port : ports) {
            nodes.add(new RedisNode(host,port));
        }
        configuration.setClusterNodes(nodes);
        return configuration;
        }
        
        @Bean
        JedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory factory = new JedisConnectionFactory(redisClusterConfiguarion(), poolConfig);
            return factory;
        }
        
        @Bean
        RedisTemplate redisTempalte() {
        RedisTemplate redisTempalte = new RedisTemplate();
        redisTempalte.setConnectionFactory(jedisConnectionFactory());
        redisTempalte.setKeySerializer(new StringRedisSerializer());
        redisTempalte.setValueSerializer(new JdkSerializationRedisSerializer());
        
        return redisTempalte;
        }
        
        @Bean
        StringRedisTemplate stringRedisTemplate() {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(jedisConnectionFactory());
        stringRedisTemplate.setKeySerializer(new StringRedisSerializer());
        stringRedisTemplate.setValueSerializer(new StringRedisSerializer());
        
        return stringRedisTemplate;
        }
    
        public List<Integer> getPorts() {
            return ports;
        }
    
        public void setPorts(List<Integer> ports) {
            this.ports = ports;
        }
    
        public String getHost() {
            return host;
        }
    
        public void setHost(String host) {
            this.host = host;
        }
    
        public JedisPoolConfig getPoolConfig() {
            return poolConfig;
        }
    
        public void setPoolConfig(JedisPoolConfig poolConfig) {
            this.poolConfig = poolConfig;
        }
        
    }

    application.yml

    server:
      port: 8091
    spring:
      redis:
        cluster:
          ports:
            - 8001
            - 8002
            - 8003
            - 8004
            - 8005
            - 8006
            - 8007
            - 8008
          host: 192.168.157.131  #此处所有的node都在同一台机器上,所以用了一个 host
          poolConfig:
            max-total: 8
            max-idle: 8
            max-wait-millis: -1
            min-idle: 0
            
            

    启动SpringBoot Application ,并在浏览器中输入: http://localhost:8091/test1

    连接任意一个Redis 实例,验证结果:

  • 相关阅读:
    369. Plus One Linked List
    147. Insertion Sort List
    817. Linked List Components
    61. Rotate List
    Object 类
    多态
    重写方法
    Protected 修饰符
    继承
    数组
  • 原文地址:https://www.cnblogs.com/luffystory/p/12083116.html
Copyright © 2020-2023  润新知