SpringBoot架构下Redis主从集群部署与应用实践
Redis主从集群采用一主多从架构,主节点负责读写,从节点只读。配置需修改端口、日志目录及主节点地址密码。Springboot集成时只需配置主节点连接,应用需明确角色避免写入从节点,但主节点故障将导致写入中断。
导航:
主从集群 哨兵集群 分区集群
环境:
redis:5.0.8 Springboot: 2.2.3.RELEASE redis安装
集群方式及配置
先梳理一下基础配置,再来看集群的相关配置。
基础配置集群配置:
#后台运行(守护进程)daemonize yes #去除保护模式(允许远程访问)protected-mode no#去除绑定(远程访问)#bind 127.0.0.1# 设置密码requirepass redispwd
本次配置基于同一机器不通端口做集群,当redis位于不同机器时,部分配置可以省去(以下配置过程中会说明/【单机非必须】:当前机器仅运行一个redis实例)
主从集群
主从集群的表现形式是一主多从,主节点负责写和读,从节点只负责读。这其实是一种最常见的读写分离方案,但要注意的是,从节点是禁止写入的。
修改主节点配置
拷贝一份配置文件命名为redis-master.conf(来源安装目录:redis-5.0.8/redis.conf)
# db写入磁盘目录位置(文件夹路径如果不存在,需要手动创建):【单机非必须】dir ./master #日志目录,默认运行命令时的目录【单机非必须】logfile "./master/master.log"#pid写入位置,默认/var/run/redis_6379.pid【单机非必须】pidfile "/var/run/redis_6379.pid"
修改丛点1配置 6380节点 拷贝redis-master.conf 命名为redis-sla ve6380.conf
# redis端口【单机非必须】port 6380 # db写入磁盘目录位置(文件夹路径如果不存在,需要手动创建):【单机非必须】dir ./sla ve/6380 #日志目录,默认运行命令时的目录【单机非必须】logfile "./sla ve/sla ve6380.log"#pid写入位置,默认/var/run/redis_6379.pid【单机非必须】pidfile /var/run/redis_6380.pid
#----以下为丛节点的不同修改点
#主节点地址(ip 端口)sla veof 192.168.1.17 6379#master节点密码 ,(打开注释,修改master的密码即可)masterauth redispwd
修改丛点2配置 6381节点 拷贝redis-sla ve6380.conf 命名为redis-sla ve6381.conf
# redis端口【单机非必须】port 6381 # db写入磁盘目录位置(文件夹路径如果不存在,需要手动创建):【单机非必须】dir ./sla ve/6381 #日志目录,默认运行命令时的目录【单机非必须】logfile "./sla ve/sla ve6381.log"#pid写入位置,默认/var/run/redis_6379.pid【单机非必须】pidfile /var/run/redis_6381.pid
#----以下为丛节点的不同修改点(因为当前节点是丛节点1复制过来的,所以以下信息无需修改)
#主节点地址(ip 端口)sla veof 192.168.1.17 6379#master节点密码 ,(打开注释,修改master的密码即可)masterauth redispwd
启动主、丛节点配置
在这里插入图片描述
#注意redis-server路径及配置文件路径 ./bin/redis-server redis-master.conf ./bin/redis-server redis-sla ve6380.conf./bin/redis-server redis-sla ve6381.conf
查看master节点
#登陆master节点,执行info命令查看主从节点信息info
丛节点已经显示
#登陆6380丛节点,执行info看一下
主节点信息已显示
分别登陆丛节点,感受一下主从同步
[root@bogon bin]# ./redis-cli -p 6380[root@bogon bin]# ./redis-cli -p 6381
master节点设置一个值
#master 节点设置 set testkey demo
在这里插入图片描述
sla ve节点查看缓存
#sla ve节点查询master缓存get testkey
sla ve6380节点
在这里插入图片描述
sla ve6381节点
在这里插入图片描述
sla ve节点不允许写入
在这里插入图片描述
主从集群在Springboot中的配置
主从集群在Springboot里的配置其实跟单机部署差不太多,但有个关键点:应用程序需要明确知道主从节点的角色,避免往从节点写入数据导致异常。也正因如此,主从配置在实际生产中用得其实不多——当然,主节点一旦挂掉,整个写入链路就断了,这也是一个硬伤。
1. pom引入
org.springframework.boot spring-boot-starter-data-redis
2.yml配置(properties配置文件类型自行转换)
spring:redis:# Redis服务器地址 单机模式host: 192.168.1.17# Redis服务器连接端口(这里配置的是主节点,可以写,可以读)port: 6379# Redis服务器连接密码(默认为空)password: redispwd#jedis连接池信息仅供参考jedis:pool:#连接池最大连接数(使用负值表示没有限制)max-active: 8# 连接池最大阻塞等待时间(使用负值表示没有限制)max-wait: -1# 连接池中的最大空闲连接pool.max-idle: 8# 连接池中的最小空闲连接pool.min-idle: 0
3.封装RedisTemplate MyRedisConfig.ja va
import com.fasterxml.jackson.annotation.JsonAutoDetect;import com.fasterxml.jackson.annotation.PropertyAccessor;import com.fasterxml.jackson.databind.ObjectMapper;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.core.ValueOperations;import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration@EnableCachingpublic class MyRedisConfig {@Beanpublic RedisTemplate
4.测试Controller SysController.ja va
import com.platform.test.common.exception.BusinessException;import com.platform.test.service.SysService;import com.platform.test.vo.BaseRespVo;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.ValueOperations;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import ja vax.servlet.http.HttpSession;import ja va.text.SimpleDateFormat;import ja va.util.Date;import ja va.util.HashMap;import ja va.util.concurrent.TimeUnit;@RestController@RequestMapping("/sys")public class SysController {static final Logger logger = LoggerFactory.getLogger(SysController.class);@Autowired@Qualifier("valueoperations")ValueOperations valueOperations;@AutowiredRedisTemplate redisTemplate;@AutowiredSysService sysService;final static String REDIS_TEST_KEY_VALUE = "__REDIS_TEST_KEY_VALUE";@RequestMapping("/health")public BaseRespVo health(HttpSession session) throws BusinessException {SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");HashMap data = new HashMap<>();data.put("time-server",sf.format(new Date()));data.put("status-redis",checkRedis());return new BaseRespVo(data);} private boolean checkRedis() {long time = System.currentTimeMillis();if(valueOperations == null){return false;}try {valueOperations.set(REDIS_TEST_KEY_VALUE time,REDIS_TEST_KEY_VALUE,300, TimeUnit.MILLISECONDS);logger.info("写入redis key: " REDIS_TEST_KEY_VALUE time " value:" REDIS_TEST_KEY_VALUE);Thread.sleep(100);String value = valueOperations.get(REDIS_TEST_KEY_VALUE time);if (value!=null && REDIS_TEST_KEY_VALUE.equals(value)) {logger.info("读取redis key: " REDIS_TEST_KEY_VALUE time " value:" value);return true;}}catch (Exception e){logger.error("redis test exception!",e);}return false;}}
执行结果:
在这里插入图片描述
sla ve节点
在这里插入图片描述
5.yml配置切sla ve节点(properties配置文件类型自行转换)
spring:redis:# Redis服务器地址 单机模式host: 192.168.1.17# Redis服务器连接端口(这里该配置为丛节点,不可以写,但可以读) 如果丛节点部署到不同的机器上记得同步修改上面的hostport: 6380
重启执行结果
在这里插入图片描述
与终端执行结果一致,均不允许写!
【补充】 需要注意的事儿~
- 主从配置需要确保cluster-enabled=no或者保持注释状态
- 主从模式下sla ve服务需要正确配置master的密码
- 主从间网络保持畅通(可达性及防火墙限制)
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
AI如何从聊天能力进化到做事能力 Skill的实践之路
让AI从“会聊天”转向“会做事”的关键在于Skill(技能包)。Skill由可执行代码、精确的说明书(如JSONSchema描述)及结果翻译器构成。通过精细定义参数与边界,AI能稳定调用接口完成重启服务、查询数据等操作,从而从空谈顾问变为可靠的数字员工。
零基础看懂Agent Skill MCP三层关系解读
智能体是自主执行任务的实体,技能是被封装的原子能力,MCP协议是智能体与技能间的标准化通信协议。智能体通过MCP协议发现并调用技能,灵活组合完成复杂任务。三者解耦,实现即插即用,降低了系统集成复杂度。
AI编码时代UI自动化测试智能化演进之路—中国平安人寿蔡雪
AI编码时代,UI自动化测试面临效率断层。平安人寿蔡雪基于自研“女娲”平台,分享从可视化录制到AI智能录制、基于EventDOM的智能感知与自愈机制的演进路径,实现用例创建降本、维护减负、执行提稳,推动测试工具从自动化向智能化升级。
一文讲清Agent、Skill、MCP到底什么关系:零基础小白三层拆解
Agent是自主执行任务的数字打工人,Skill为原子化能力函数,MCP是标准协议接口。Agent通过MCP发现并调用Skill,实现即插即用,解耦技能与智能体,让大模型能力安全、统一、可扩展地集成。
文生图同一提示词为何每次不同?随机性与可复现解析
文生图每次结果不同源于从随机噪声开始去噪。固定种子(seed)可锁定初始噪声,但还需采样步数、引导强度、采样器、尺寸、提示词、模型等参数一致才能复现。通过控制变量法调参,先固定种子再逐一调整其他参数,可精确归因差异。
- 热门数据榜
相关攻略
2026-07-10 11:09
2026-07-10 11:09
2026-07-10 11:09
2026-07-10 11:09
2026-07-10 11:09
2026-07-10 11:08
2026-07-10 11:08
2026-07-10 11:08
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

