当前位置:

首页 > 编程开发 > 如何使用Spring Boot实现Redis主从复制和Sentinel高可用性部署?

如何使用Spring Boot实现Redis主从复制和Sentinel高可用性部署?

Redis Assistant
Redis Assistant

Redis Assistant 是一款为Redis设计的高效可视化管理与监控工具,提供多种操作模式,高效处理服务器数据。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

立即下载
¥19
Windows/macOS/Linux 2026-08-22
正版软件 Windows macOS软件 Linux 数据库管理工具

springboot整合redis主从sentinel一主二从三sentinel配置1、master:127.0.0.1:63792、slave1:127.0.0.1:63803、slave2:127.0.0.1:63814、sentinel1:127.0.0.1:263795、sentinel2:127.0.0.1:264796、sentinel3:127.0.0.1:265797、监听的主机名:mymaster8、附上sentinel1的配置port26379sentinelmonitormymast

本文目录

    springboot整合redis主从sentinel

    一主二从三sentinel配置

    • 1、master:127.0.0.1:6379

    • 2、slave1:127.0.0.1:6380

    • 3、slave2:127.0.0.1:6381

    • 4、sentinel1:127.0.0.1:26379

    • 5、sentinel2:127.0.0.1:26479

    • 6、sentinel3:127.0.0.1:26579

    • 7、监听的主机名:mymaster

    • 8、附上sentinel1的配置

    port 26379
    sentinel monitor mymaster 127.0.0.1 6379 2
    sentinel down-after-milliseconds mymaster 5000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 15000

    新建spring boot工程,并加入Redis依赖

    如何使用Spring Boot实现Redis主从复制和Sentinel高可用性部署?

    工程结构

    如下:

    如何使用Spring Boot实现Redis主从复制和Sentinel高可用性部署?

    pom文件如下:

    
    
    	4.0.0
     
    	com.chhliu.springboot.redis
    	springboot-redis
    	0.0.1-SNAPSHOT
    	jar
     
    	springboot-redis
    	Demo project for Spring Boot redis
     
    	
    		org.springframework.boot
    		spring-boot-starter-parent
    		1.4.3.RELEASE
    		 
    	
     
    	
    		UTF-8
    		UTF-8
    		1.7
    	
     
    	
    		
    			org.springframework.boot
    			spring-boot-starter-data-redis
    		
     
    		
    			org.springframework.boot
    			spring-boot-starter-test
    			test
    		
    	
     
    	
    		
    			
    				org.springframework.boot
    				spring-boot-maven-plugin
    			
    		
    	
    

    修改application.properties配置文件

    配置文件添加内容如下:

    ########################################################
    ###REDIS (RedisProperties) redis基本配置;
    ########################################################
    # database name
    spring.redis.database=0
    # server host1 单机使用,对应服务器ip
    #spring.redis.host=127.0.0.1  
    # server password 密码,如果没有设置可不配
    #spring.redis.password=
    #connection port  单机使用,对应端口号
    #spring.redis.port=6379
    # pool settings ...池配置
    spring.redis.pool.max-idle=8
    spring.redis.pool.min-idle=0
    spring.redis.pool.max-active=8
    spring.redis.pool.max-wait=-1
    # name of Redis server  哨兵监听的Redis server的名称
    spring.redis.sentinel.master=mymaster
    # comma-separated list of host:port pairs  哨兵的配置列表
    spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26479,127.0.0.1:26579

    新建Redis服务

    package com.chhliu.springboot.redis; 
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.stereotype.Service;
     
    @Service("redisService")
    public class RedisService {
    	@Autowired //操作字符串的template,StringRedisTemplate是RedisTemplate的一个子集
    	private StringRedisTemplate stringRedisTemplate;
    	
    	@Autowired  // RedisTemplate,可以进行所有的操作
            private RedisTemplate redisTemplate;  
    	
    	public void set(String key, String value){
    		stringRedisTemplate.opsForValue().set(key, value);
    	}
    	
    	public void set(Student s){
    		redisTemplate.opsForValue().set(s.getId(), s);
    	}
    	
    	public String get(String key){
    		return stringRedisTemplate.opsForValue().get(key);
    	}
    	
    	public Student getStudent(String key){
    		return (Student) redisTemplate.opsForValue().get(key);
    	}
    }

    依赖的vo如下:

    package com.chhliu.springboot.redis; 
    import java.io.Serializable; 
    public class Student implements Serializable{ 
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	private String id;	
    	private String name;	
    	private String age;	
    	private String grade; 
           // 省略getter,setter
    	/**
    	 * attention:
    	 * Details:TODO
    	 * @author chhliu
    	 * 创建时间:2017-1-18 下午2:24:39
    	 * @return
    	 */
    	@Override
    	public String toString() {
    		return "Student [id=" + id + ", name=" + name + ", age=" + age
    				+ ", grade=" + grade + "]";
    	}
    }

    测试类

    package com.chhliu.springboot.redis; 
    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;
     
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringbootRedisApplicationTests {	
    	@Autowired
    	private RedisService service;
     
    	@Test
    	public void contextLoads() {
    		service.set("myname", "chhliu");
    		Student s = new Student();
    		s.setId("001");
    		s.setName("chhliu");
    		s.setGrade("一年级");
    		s.setAge("28");
    		service.set(s);
    		
    		String name = service.get("myname");
    		System.out.println("name:"+name);
    		
    		Student stu = service.getStudent("001");
    		System.out.println(stu);
    	} 
    }

    测试结果

    name:chhliu

    Student [id=001, name=chhliu, age=28, grade=一年级]

    redis哨兵模式sentinel与springboot集成

    Redis的哨兵模式是官方提供的一种高可用解决方案,而且配置非常简单。

    安装Redis集群

    本文使用redis-5.0.5,redis安装在/soft/redis目录下,需新建/soft/redis/data目录

    主节点配置  

    vim config/redis-6379.conf

    # bind 127.0.0.1 
    port 6379
    protected-mode no
    daemonize yes
    pidfile "/var/run/redis_6379.pid"
    dir "/soft/redis/data"
    dbfilename "dump-6379.rdb"
    logfile "log-6379.log"

    从节点1配置

    vim config/redis-6380.conf

    # bind 127.0.0.1
    port 6380
    protected-mode no
    daemonize yes
    pidfile "/var/run/redis_6380.pid"
    dir "/soft/redis/data"
    dbfilename "dump-6380.rdb"
    logfile "log-6380.log"
     
    replicaof 192.168.4.176 6379

    从节点2配置

    vim config/redis-6381.conf

    # bind 127.0.0.1
    port 6381
    protected-mode no
    daemonize yes
    pidfile "/var/run/redis_6381.pid"
    dir "/soft/redis/data"
    dbfilename "dump-6381.rdb"
    logfile "log-6381.log"
     
    replicaof 192.168.4.176 6379

    配置说明

    # bind 127.0.0.1  注释掉这配置,以便其他机器的能连接redis

    protected-mode no 关闭保护模式,以便其他机器的能连接redis

    daemonize后台模式启动

    redis-v5版本使用replicaof替换旧的slaveof指令。

    启动这3个节点,在/soft/redis目录下运行

    redis-server config/redis-6379.conf
    redis-server config/redis-6380.conf
    redis-server config/redis-6381.conf

    打开主节点客户端看看配置是否成功

    redis-cli -p 6379
    info replication

    如何使用Spring Boot实现Redis主从复制和Sentinel高可用性部署?

    再配置3个哨兵,监控集群

    哨兵节点1

    vim config/redis-sentinel-26379.conf

    port 26379
    daemonize yes
    pidfile "/var/run/redis-sentinel-26379.pid"
    dir /tmp
    logfile "log-sentinel-26379.log"
    sentinel monitor mymaster 192.168.4.176 6379 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    sentinel deny-scripts-reconfig yes

    哨兵节点2

    vim config/redis-sentinel-26380.conf

    port 26380
    daemonize yes
    pidfile "/var/run/redis-sentinel-26380.pid"
    dir /tmp
    logfile "log-sentinel-26380.log"
    sentinel monitor mymaster 192.168.4.176 6379 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    sentinel deny-scripts-reconfig yes

    哨兵节点3

    vim config/redis-sentinel-26381.conf

    port 26381
    daemonize yes
    pidfile "/var/run/redis-sentinel-26381.pid"
    dir /tmp
    logfile "log-sentinel-26381.log"
    sentinel monitor mymaster 192.168.4.176 6379 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    sentinel deny-scripts-reconfig yes

    配置说明

    monitor mymaster 192.168.4.176 6379 2

    mymaster是master的名称,192.168.4.176是master主机ip。后面的2表示有2个sentinel认为master下线了,则线下master,建议设置为 sentinel节点数/2 + 1

    down-after-milliseconds

    发送ping请求给redis节点,在指定时间内未收到回复,则认为该节点应该被下线

    parallel-syncs

    在执行故障转移时,最多可以有多少个从节点同时对新的主服务器进行同步。

    启动哨兵

    redis-sentinel config/redis-sentinel-26379.conf
    redis-sentinel config/redis-sentinel-26380.conf
    redis-sentinel config/redis-sentinel-26381.conf

    配置spring-boot

    pom.xml中导入依赖

    
        org.springframework.boot
        spring-boot-starter-data-redis
    

    application.properties加入两行配置

    # 使用哨兵模式不能加以下两行配置,其他配置可以加
    # spring.redis.host=192.168.4.176
    # spring.redis.port=6379
     
    spring.redis.sentinel.master=mymaster
    spring.redis.sentinel.nodes=192.168.4.176:26379, 192.168.4.176:26380, 192.168.4.176:26381

    写一个测试类运行

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class Sentinel001 { 
        @Autowired
        RedisTemplate redisTemplate;
     
        @Test
        public void test001() throws Exception{
            while (true){
                String key = "time:" + new Date().getTime();
                redisTemplate.opsForValue().set(key, new Date().getTime());
                TimeUnit.MILLISECONDS.sleep(100L);
                System.out.println(redisTemplate.opsForValue().get(key));
            } 
        } 
    }

    然后杀掉master实例(端口号为6379的redis)的进程

    ps -ef|grep redis
    kill -9 11110

    观察代码编辑器控制台输出,经过短暂的时间(大概是50s)后,程序重新运行正常

    在6380和6381节点执行info replication,发现6381变成了主节点

    如何使用Spring Boot实现Redis主从复制和Sentinel高可用性部署?

    查看下6380、6381的配置文件

    cat config/redis-6380.conf
    replicaof 192.168.4.176 6381
    replicaof 变成了192.168.4.176 6381,而不是刚开始配置时的192.168.4.176 6379
    cat config/redis-6381.conf 
    replicaof 的配置被删除了

    重启下6379这个redis实例

    redis-server config/redis-6379.conf

    6379变成了6381的从节点

    有个比较坑爹的事情,RedisTemplate未实现读写分离,读写都是操作master节点。运行上面的代码,在3个redis客户端运行monitor发现,只有master会运行get、set命令,从节点只运行了set命令。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    spring hibernate 详细教程:新手也能快速学会
    spring hibernate 详细教程:新手也能快速学会

    Spring与Hibernate是Java企业开发的核心框架。Spring通过依赖注入管理对象生命周期,简化开发;Hibernate作为ORM工具,实现对象与数据库映射,避免繁琐SQL。两者结合能构建结构清晰、易于维护的应用。教程涵盖环境搭建、实体映射、数据操作及事务管理等实践内容,帮助新手快速掌握整合开发。

    Spring Boot 注册 Servlet 的五种方法(最新整理)
    Spring Boot 注册 Servlet 的五种方法(最新整理)

    在 Spring Boot 里注册 Servlet,其实有不止一种做法,而且每种方式适合的场景也不太一样:有的更偏配置化,有的更适合注解扫描,还有的更强调运行时动态注册。下面把常见的五种方式完整梳理一遍,方便直接对照使用。 一、Spring Boot 提供了 ServletRegistrationB

    从IDEA到Docker部署Spring Boot环境变量配置详解
    从IDEA到Docker部署Spring Boot环境变量配置详解

    一、问题背景 在 Spring Boot 项目里,配置文件用占位符引用环境变量可以说是家常便饭了,比如下面这种写法: url: jdbc:mysql://${datasource_addr:10.xxx.xxx.xxx:5236}/mydb 但有一个现象挺让人头疼的:同样的配置,在 IDEA 里跑得

    Spring MVC+ajax进行信息验证的方法
    Spring MVC+ajax进行信息验证的方法

    采用AJAX与SpringMVC的异步验证,通过XMLHttpRequest对象实现局部数据交换,利用@ResponseBody返回JSON或字符串,结合@RequestBody解析请求体,完成表单无刷新校验,包括用户名重复检测与密码一致性验证。该方法提升交互效率,减少带宽占用,有效确保数据准确性,提升用户体验。

    php72w redis,docker php7安装php-redis
    php72w redis,docker php7安装php-redis

    在Docker环境下为PHP安装Redis扩展:手动编译需下载源码、安装phpize、配置编译并安装,生成redis.so并在php.d目录新建redis.ini加载,重启PHP-FPM;也可直接yum安装php72w-pecl-redis,免手动编译。

    php 如何配置 redis,php 如何设置redis
    php 如何配置 redis,php 如何设置redis

    配置PHP的Redis扩展:先安装Redis服务,从GitHub下载phpredis源码,用phpize编译安装,修改php.ini添加extension=redis.so,重启php-fpm或Apache,通过phpinfo验证并连接Redis。

    c++如何将结构体序列化为Redis兼容的RESP协议格式【深度】
    c++如何将结构体序列化为Redis兼容的RESP协议格式【深度】

    C++结构体无法直接序列化为RESP协议,需手动将字段映射为*N数组嵌套$lenbulkstring形式。整数需转换为字符串并加:前缀,空字符串用$0\r\n,null用$-1\r\n。长度计算需精确到字节数,特别注意二进制安全,同时确保字段顺序与结构体定义一致。

    Spring Security 2026 构建安全、可靠的企业应用实践指南
    Spring Security 2026 构建安全、可靠的企业应用实践指南

    SpringSecurity2026是一款强大的安全框架,提供多因素认证、OAuth2.0与OpenIDConnect协议支持以及强密码管理功能;支持基于角色、权限和表达式的细粒度授权控制;同时涵盖跨站请求伪造与跨站脚本攻击等安全防护最佳实践,助力企业级应用安全构建。

    如何在Golang架构中部署Redict作为高能数据临时存储中转站
    如何在Golang架构中部署Redict作为高能数据临时存储中转站

    Redis作为跨服务临时状态枢纽,需按消息队列、缓存和原子状态三重角色设计。选型用List实现任务分发及延迟重试,Stream用于事件广播与位点回溯。go-redis/v8需配置MinIdleConns、MaxRetries及超时。数据写入应JSON序列化并带type标签、设合理TTL、将关键字段提至顶层。消费通过原子GET+DEL或processedkey

    TP8.0 高并发下库存超卖?Redis 原子递减结合数据库乐观锁控制
    TP8.0 高并发下库存超卖?Redis 原子递减结合数据库乐观锁控制

    在高并发秒杀场景下,利用Redis的减库存原子操作预扣减库存拦截超卖请求,再通过数据库乐观锁(版本号与库存校验)确保最终一致性,异常时回滚Redis库存并借助Lua脚本保证原子性,从而有效防止库存超卖。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?