【Redis】Spring Boot整合(新建项目开始手把手教学): 1主2从3哨兵,redisTemplate

一、环境准备

1.0 搭建redis 1主2从3哨兵

请参考本人博客:
《Redis 1主2从3哨兵 介绍与实操:replicaof、replica-priority、masterauth、sentinel monitor、sentinel auth-pass》

1.1 新建项目

在这里插入图片描述

在这里插入图片描述

1.2 清理项目

在这里插入图片描述
在这里插入图片描述

1.3 配置maven

在这里插入图片描述

二、导入依赖

在这里插入图片描述

    <dependencies>
        <!--        redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--        spring-web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--        spring2.X集成redis所需common-pool2-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.6.0</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

三、配置文件

修改配置文件类型。项目结构纯属个人习惯

在这里插入图片描述

spring:
  redis:
    host: 192.168.100.103
    port: 6379
    password: 123456
    database: 0
    #连接超时时间(毫秒)
    timeout: 10000
    lettuce:
      pool:
        #连接池中的最大空闲连接
        max-idle: 5
        #最大阻塞等待时间(负数表示没限制)
        max-wait: -1
        #连接池最大连接数(使用负值表示没有限制)
        max-active: 20
        #连接池中的最小空闲连接
        min-idle: 0
    sentinel:
      master: mymaster
      nodes: 192.168.100.103:26379,192.168.100.103:26380,192.168.100.103:26381
  application:
    name: Redis-SpringBoot
server:
  port: 8081

四、配置类

在这里插入图片描述

package com.example.test.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.time.Duration;

@EnableCaching
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // 配置序列化(解决乱码的问题),过期时间600秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }
}

五、controller

在这里插入图片描述

package com.example.test.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/redis")
public class RedisSbootController {
    @Autowired
    private RedisTemplate redisTemplate;

    @RequestMapping("/setValue/{key}/{value}")
    public String setValue(@PathVariable(value = "key") String key,@PathVariable(value = "value") String value){
        redisTemplate.opsForValue().set(key,value);
        return "添加成功!";
    }
    @RequestMapping("/getValue/{key}")
    public String getValue(@PathVariable(value = "key") String key){
        Object o = redisTemplate.opsForValue().get(key);
        return key+"的值为:"+o;
    }
}

六、测试

6.1 启动

在这里插入图片描述

6.2 正常使用

  • 添加数据

  • 在这里插入图片描述

  • 获取数据

  • 在这里插入图片描述

6.3 模拟 redis6379 宕机

127.0.0.1:6379> shutdown
not connected> 

6.4 等待故障恢复

成功添加和获取数据

  • 添加数据
    在这里插入图片描述

  • 获取数据
    在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在使用Spring Boot整合Redis时,可以实现从复制的配置从复制是指在Redis集群中,有一个节点负责处理写操作,并且将写操作同步到多个从节点上。这种配置可以提高系统的读取性能和可用性。 要实现Spring Boot整合Redis从复制,可以按照以下步骤进行操作: 1. 首先,在pom.xml文件中引入相关依赖。可以使用Spring Boot提供的`spring-boot-starter-data-redis`依赖来简化配置,同时需要引入`commons-pool2`依赖以支持连接池: ``` <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- spring2.X集成redis所需common-pool2 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.6.0</version> </dependency> ``` 2. 然后,在application.properties或application.yml文件中进行相关的配置。可以配置节点和从节点的连接信息,例如: ``` # Redis节点配置 spring.redis.host=节点地址 spring.redis.port=节点端口 spring.redis.password=节点密码 # Redis从节点配置 spring.redis.sentinel.master=节点名称 spring.redis.sentinel.nodes=从节点地址1,从节点地址2,从节点地址3 ``` 3. 最后,在Spring Boot配置类中进行Redis的相关配置。可以使用`RedisSentinelConfiguration`类来配置从节点的连接信息,例如: ``` @Configuration public class RedisConfig { @Value("${spring.redis.sentinel.master}") private String master; @Value("${spring.redis.sentinel.nodes}") private String nodes; @Bean public RedisSentinelConfiguration redisSentinelConfiguration() { RedisSentinelConfiguration configuration = new RedisSentinelConfiguration(); String[] nodeArray = nodes.split(","); for (String node : nodeArray) { String[] hostPort = node.split(":"); String host = hostPort<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot整合redis代码](https://download.csdn.net/download/qq_34531925/10412347)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [redis整合springboot](https://blog.csdn.net/weixin_45397764/article/details/118828384)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Java企业报表管理系统源码](https://download.csdn.net/download/m0_55416028/88269629)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿你满腹经纶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值