springboot实战之redisTemplate连接redis集群

6 篇文章 0 订阅
5 篇文章 0 订阅

首先,先搭建一个redis集群,搭建redis集群的教程
连接redis的集群有多个API,但因为平时使用的都是Spring的redisTemplate,所以我们使用redisTemplate连接redis集群。

直接上代码,如果你redis集群搭的没毛病,贴上代码,就能操作redis集群。代码目录如下

1、maven配置

<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 http://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.7.2</version>
    <relativePath/>
  </parent>

  <groupId>org.example</groupId>
  <artifactId>redisClusterTest</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>redisClusterTest</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
    </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>redis.clients</groupId>
      <artifactId>jedis</artifactId>
    </dependency>
  </dependencies>
</project>

2、redis集群配置

spring:
  redis:
    timeout: 5000
    database: 0
    cluster:
      nodes: 公网ip:7001,公网ip:7002,公网ip:7003,公网ip:7004,公网ip:7005,公网ip:7006
      max-redirects: 3
    jedis:
      pool:
        max-active: 8
        max-wait: 10000
        max-idle: 8
        min-idle: 0

3、redis集群配置类

@Configuration
public class RedisConfiguration {
    @Autowired
    private ObjectMapper objectMapper;

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);

        // 使用Jackson2JsonRedisSerialize 替换默认的jdkSerializeable序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

        // key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        // value序列化方式采用jackson
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

4、验证redisTemplate操作的确实是集群

4.1、向集群写入一个键值对

@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class, webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class AppTest {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Test
    public void testApp() {
        redisTemplate.opsForValue().set("testKey","testValue");
    }
}

4.2、登录redis集群,查看测试代码写入的键值对

[root@hcss-ecs-858f src]# ./redis-cli -c -h 127.0.0.1 -p 7001
127.0.0.1:7001> get testKey
"\"testValue\""

5、遇到的问题

5.1、问题一

报错:no reachable node in cluster
原因:创建redis集群时,没有使用公网ip创建

5.2、问题二

报错:org.springframework.data.redis.toomanyclusterredirectionsexception no more cluster attempts left
原因:创建redis集群时,没有使用公网ip创建

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值