Redis Cluster with SpringBoot
Posted Happy2Share
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 实例,验证结果:
以上是关于Redis Cluster with SpringBoot的主要内容,如果未能解决你的问题,请参考以下文章
laravel报Cannot use ‘EVAL‘ with redis-cluster.
在Spring Boot 上配置Redis Cluster出现的异常
Spring Boot Redis Cluster 实战干货
spring boot:使用redis cluster集群作为分布式session(redis 6.0.5/spring boot 2.3.1)