当前位置: 首页 > news >正文

Redis学习5 分布式缓存(下)

羽根が千切れ散っても

分布式缓存(下)

Redis哨兵

slave节点宕机恢复后可以找master节点同步数据,而master节点宕机的话,数据可以通过数据持久化来恢复,但是外界的读操作和写操作此时被阻塞了。

我们希望在Redis主从集群搭建完成后,在Master宕机的情况会有Slave来紧急替换Master完成工作。

哨兵机制和原理

Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构如下:
image

作用如下:

监控:Sentinel会不断检查您的Master和Slave是否按预期工作
自动故障恢复:如果Master故障,Sentinel会将一个Slave提升为Master。当故障实例恢复后也以新的Master为主
通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端

Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:

主观下线:如果某Sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。
客观下线:若超过指定数量(quorum)的Sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。

image

选择作为新Master的Slave的选择依据如下:

首先会判断Slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds*10)则会排除该Slave节点
然后判断Slave节点的slave-priority,越小优先级越高,如果是O则永不参与选举
如果slave-prority一样,则判断Slave节点的offset,越大说明数据越新,优先级越高
最后是判断Slave节点的运行id大小,越小优先级越高。(其实这个时候选哪个都一样没啥区别)

当选中了其中一个Slave为新的Master后(例如Slave1),故障的转移的步骤如下:

Sentinel给备选的Slave1节点发送slaveof no one命令,让该节点成为Master
Sentinel给所有其它Slave发送slaveof 127.0.0.1 7002命令,让这些Slave成为新Master的从节点,开始从新的Master上同步数据。
最后,Sentinel将故障节点标记为Slave,当故障节点恢复后会自动成为新的Master的Slave节点

image

RedisTemplate的哨兵模式

在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化及时更新连接信息。Spring的RedisTemplate底层利用lettuce实现了节点的感知和自动切换。

首先在Redis配置文件pom.xml中引入Redis的starter依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

在配置文件application.yml中设置sentinel的相关信息(注意是sentinel)

spring:redis:sentinel:master:mymaster # 指定master名称nodes: # 指定redis-sentinel集群信息- 127.0.0.1:27001- 127.0.0.1:27002- 127.0.0.1:27003

配置主从读写分离

@Bean
public LettuceClientConfigurationBuilderCustomizer ConfigurationBuilderCustomizer() {return configBuilder -> configBuilder.readFrom (ReadFrom.REPLICA_PREFERRED);
}

这里的ReadFrom是配置Redis的读取策略,是一个枚举,包括下面选择:

MASTER:从主节点读取
MASTER_PREFERRED:优先从Master节点读取,Master不可用才读取replica
REPLICA: 从Slave (replica) 节点读取
REPLICA_PREFERRED:优先从Slave (replica)节点读取,所有的Slave都不可用才读取Master

该配置类含义是:‌优先从Slave读取数据,如果从节点不可用,则回退到Master读取。

Redis分片集群

主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:

海量数据存储问题
高并发写的问题。

使用分片集群可以解决上述问题,分片集群特征:

集群中有多个Master,每个Master保存不同数据
每个Master都可以有多个Slave节点
Master之间通过ping监测彼此健康状态
客户端请求可以访问集群任意节点,最终都会被转发到正确节点

Redis分片集群的JAVA配置和用法同哨兵机制比起来只有配置文件存在差异:

spring:redis:cluster:nodes: # 指定分片集群的每一个节点信息- 127.0.0.1:7001- 127.0.0.1:7002- 127.0.0.1:7003- 127.0.0.1:8001- 127.0.0.1:8002- 127.0.0.1:8003
http://www.jsqmd.com/news/785439/

相关文章:

  • 深度学习在眼科AI诊断中的应用:从模型构建到临床落地
  • KITTI不够用?深度评测ORFD:这个专为越野打造的免费数据集到底香不香
  • meituan mtgsig1.2
  • CANN/pyasc架构介绍
  • cann/sip asdConvolve卷积滤波算子
  • 2026 年鼓楼区 GEO 优化公司深度测评:南京赢之乐凭本土深耕与合规技术领跑 - 小艾信息发布
  • AI智能体技能开发实战:从黄历查询看垂直领域知识封装
  • 多模态机器学习:从融合范式到MULTIBENCH基准实践
  • 3篇3章8节:Obsidian 的全方位写作工作流
  • 解锁私人游戏云:用Sunshine打造专属游戏串流服务器
  • AI数据污染与模型退化:扩散模型自训练实验揭示反馈循环风险
  • 顶会论文模块复现与二次创新:ICLR 2026 复现:状态空间模型 Vim 模块在视觉检测中的高效替代与 YOLO 集成
  • 2026年5月武汉殡葬机构靠谱服务商深度测评攻略 - 海棠依旧大
  • 鄂尔多斯地磅配件采购指南:本地标杆厂家与高性价比定制方案推荐 - 品牌策略师
  • 从FOLD规则到反事实解释:构建可信AI系统的核心技术路径
  • CANN/HCCL集合通信库快速入门指南
  • 芯片设计实战:变异感知设计方法论与先进工艺下的良率挑战
  • 扩散模型原理与实践:从噪声预测到图像生成的AI核心技术
  • cann/ops-math矩阵乘压缩解压缩算子
  • 《龙虾OpenClaw系列:从嵌入式裸机到芯片级系统深度实战60课》038、多核架构入门——双核通信与共享内存
  • AI赋能分子相互作用:几何深度学习在药物与材料设计中的实践
  • 保姆级教程:用Tinc在Ubuntu 22.04上搭建一个加密的虚拟局域网(附多节点配置避坑指南)
  • UIKit开发者的桌面助手:生命周期、内存、并发与集合视图实践指南
  • 《网络攻防实践》实践八报告
  • 告别‘黑盒子’:用一台标准服务器搞定防火墙、路由和DHCP,聊聊NFV在家庭和企业网关的实战应用
  • XHS-Downloader:专业级小红书内容采集与批量下载技术方案
  • Rust轻量级LLM推理框架graniet/llm:本地部署与高性能实践
  • 4.30 redis简介
  • 强化学习中的文化累积:从个体智能到群体智慧的进化范式
  • AR-LLM大规模部署下的自然语言攻击:原理、风险与纵深防御实践