整理好了!2024年最常见 20 道 Redis面试题(五)

上一篇地址:整理好了!2024年最常见 20 道 Redis面试题(四)-CSDN博客

九、Redis 的哨兵系统是什么?

Redis 的哨兵系统,通常被称为 Sentinel,是 Redis 的一种高可用性解决方案1347810。它由一个或多个 Sentinel 实例组成,这些实例可以监视任意数量的主服务(Redis 主节点)以及它们的从服务(Redis 从节点)7。哨兵系统的主要目的是监控 Redis 主从复制集群的状态,并且在主节点发生故障时自动进行故障转移,从而保证服务的持续性和可用性1348。

在哨兵系统中,存在两种主要角色:哨兵和数据节点。数据节点包括主节点和从节点,而哨兵是特殊的 Redis 节点,它们不存储数据,专门负责监控36。哨兵系统通过以下关键功能实现高可用性:

  1. 监控(Monitoring):哨兵不断地检查主从实例是否按照预期工作4。它会定期向所有已知的 Redis 实例发送 PING 命令来检测它们是否仍然在线3。

  2. 通知(Notification):当监控到的 Redis 实例出现问题时,哨兵可以通过 API 向系统管理员或其他应用程序发送通知4。

  3. 自动故障转移(Automatic failover):如果主节点没有按预期工作,哨兵会开始故障转移过程。这包括将一个从节点提升为新的主节点,并重新配置其他的从节点使用新的主节点。同时,使用 Redis 服务的应用程序在连接时也会被通知新的地址4。

  4. 配置提供者(Configuration provider):哨兵为客户端提供服务发现的来源。客户端连接到哨兵来寻找当前主节点的地址,并且在故障转移发生时,哨兵会报告新的地址4。

哨兵系统是分布式的,多个哨兵进程互相合作,提高了系统的健壮性和减少了误判的可能性4。当多个哨兵一致同意一个主节点不再可用时,它们会执行故障检测,并进行故障转移4。即使并非所有的哨兵都在工作,系统也能继续运行,增加了系统的容错性4。

在实际部署中,哨兵系统通过配置文件进行设置,其中包括监控的主节点信息、故障转移所需的最小哨兵同意数(称为 quorum)、以及故障转移超时时间等参数3。哨兵之间通过流言协议(gossip protocols)来交换信息,并通过投票协议(agreement protocols)来决定是否执行自动故障迁移以及选择哪个从服务器作为新的主服务器3。

总的来说,Redis 的哨兵系统是一个强大的高可用性解决方案,它通过监控、自动故障转移和配置管理等功能,确保了 Redis 集群在面临主节点故障时能够自动恢复服务,从而提高了整个系统的稳定性和可靠性。

十、Redis 的集群模式是如何工作的?

Redis 集群模式是一种提供数据分区、高可用性以及线性扩展的解决方案。它允许多个 Redis 节点共同工作,通过分片(sharding)来存储数据,并提供复制和故障转移功能。以下是 Redis 集群模式的主要工作原理和组件:

1. 数据分片(Sharding)

Redis 集群通过数据分片来分布数据跨多个节点。集群中的每个节点负责存储键值对的一部分。Redis 集群使用哈希槽(hash slots)来分割数据,每个槽位存储一部分数据。默认情况下,有16384个槽位。

2. 节点和角色

集群中的每个节点可以是以下几种角色之一:

  • 主节点(Master):负责处理写操作和读取操作,以及管理自己的数据槽位。
  • 从节点(Slave):复制主节点的数据,提供读操作的负载均衡,并在主节点故障时提供故障转移。

3. 数据复制

主节点会将其数据复制给从节点。当客户端写入数据时,数据首先写入主节点,然后由主节点异步复制到其从节点。这种复制机制确保了数据的一致性和高可用性。

4. 高可用性和故障转移

Redis 集群通过以下机制实现高可用性:

  • 故障检测:集群中的节点会相互监控,检测其他节点是否在线和响应。
  • 故障转移:如果主节点失败,集群会自动进行故障转移。集群中的其他主节点会协商选举出一个从节点来替代故障的主节点,并将数据复制到新的主节点。
  • 配置传播:故障转移后,集群会自动更新集群的配置,并将新的主节点信息传播给客户端。

5. 线性扩展

由于数据是分布在多个节点上的,Redis 集群可以通过增加更多的节点来实现线性扩展,从而提高存储容量和处理能力。

6. 客户端交互

客户端与 Redis 集群交互时,需要知道集群的某些信息,如槽位映射到哪个节点。客户端库通常内置了集群感知功能,能够自动发现集群结构并根据数据所在的槽位将请求路由到正确的节点。

7. 持久性和安全性

Redis 集群提供了持久性选项,如 RDB 快照和 AOF 日志,以确保数据不会因故障而丢失。集群还提供了安全特性,如密码保护和 SSL 加密,以保护数据安全。

8. 集群管理

Redis 集群的管理和维护包括节点的添加、移除、故障诊断和监控。Redis 提供了管理命令和工具来帮助管理员执行这些任务。

Redis 集群模式的设计目标是在不牺牲性能的前提下,提供高可用性和可扩展性。它适用于需要处理大量数据和高并发请求的场景,能够通过简单的水平扩展来满足不断增长的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件流下载优化:由表单提交方式修改为Ajax请求

如果想直接看怎么写的可以跳转到 解决方法 节! 需求描述 目前我们系统导出文件时,都是通过表单提交后,接收文件流自动下载。但由于在表单提交时没有相关调用前和调用后的回调函数,所以我们存在的问题,假如导出数据需…

MyBatisPlus使用流程

引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.4</version> </dependency> 版本号根据需要选取 在实体类上加注解声明&#xff0c;表信息 根据数…

Redis教程(十):Redis中三种特殊数据类型命令

一、Geospatial Geospatial是地理位置类型&#xff0c;我们可以用来查询附近的人、计算两人之间的距离等。 新增&#xff1a; geoadd city 106.54041 29.40268 chongqing 118.8921 31.32751 nanjing 117.30794 31.79322 hefei 102.82147 24.88554 kunming 91.13775 29.65262…

js实现png纯色填充

最近需要把logo换个填充颜色&#xff0c;写了个页面&#xff0c;效果还行 png颜色填充 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

get和post的区别,二者是幂等的吗?

一、什么是幂等 所谓幂等性通俗的将就是一次请求和多次请求同一个资源产生相同的副作用。 维基百科定义&#xff1a;幂等&#xff08;idempotent、idempotence&#xff09;是一个数学与计算机学概念&#xff0c;常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执…

U-Mail邮件系统为用户提供更加安全的数据保护机制

据外媒报道&#xff0c;近日美国国家安全委员会泄露了其成员的近1万封电子邮件和密码&#xff0c;暴露了政府组织和大公司在内的2000家公司。其中包括美国国家航空航天局和特斯拉等。报道称该漏洞于3月7日被研究人员发现&#xff0c;通过该漏洞攻击者能够访问对web服务器操作至…

WordPress主题 7B2 PRO 5.4.2 免授权开心版源码

本资源提供给大家学习及参考研究借鉴美工之用&#xff0c;请勿用于商业和非法用途&#xff0c;无任何技术支持&#xff01; WordPress主题 7B2 PRO 5.4.2 免授权开心版源码 B2 PRO 5.4.2 最新免授权版不再需要改hosts&#xff0c;和正版一样上传安装就可以激活。 直接在Word…

Java interface 接口

接口(interface) 接口的理解 接口就是规范&#xff0c;定义的是一组规则&#xff0c;体现了现实世界中“如果你是/要…则必须能…”的思想。继承是一个"是不是"的is-a关系&#xff0c;而接口实现则是 "能不能"的has-a关系。 接口的本质是契约、标准、规范…

重新夺回控制权!原创始人从Synk回购FossID,致力于解决开源许可合规风险

FossID 于 2022 年 9 月被其原始创始人从 Snyk, Inc. 重新收购。为什么 Snyk 在 2021 年收购了 FossID&#xff0c;又在 2022 年将其分拆&#xff0c;以及为什么 FossID 的创始人&#xff08;Oskar Swirtun 和 Jon Aldama&#xff09;后来又回购了该公司&#xff1f; 公司背景 …

代码随想录算法训练营Day48 | 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II

代码随想录算法训练营Day48 | 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II LeetCode 121. 买卖股票的最佳时机 题目链接&#xff1a;LeetCode 121. 买卖股票的最佳时机 思路&#xff1a; 取左边最小&#xff0c;更新右边最大。 class Solution { public:int maxProf…

YOLOv8_seg的训练、验证、预测及导出[实例分割实践篇]

实例分割数据集链接,还是和目标检测篇一样,从coco2017val数据集中挑出来person和surfboard两类:链接:百度网盘 请输入提取码 提取码:3xmm 1.实例分割数据划分及配置 1.1实例分割数据划分 从上面得到的数据还不能够直接训练,需要按照一定的比例划分训练集和验证集,并按…

Servlet的response对象

目录 HTTP响应报文协议 reponse继承体系 reponse的方法 响应行 public void setStatus(int sc) 响应头 public void setHeader(String name, String value) 响应体 public java.io.PrintWriter getWriter() public ServletOutputStream getOutputStream() 请求重定…

【GUI开发基础】

GUI开发基础 &#x1f31f;项目文件组成✨浅析Pro文件配置 &#x1f31f;Qt设计师&#x1f31f;剖析UI文件运行机制&#x1f31f;UI设计方式✨可视化UI设计✨代码化UI设计 &#x1f31f;项目文件组成 创建一个QtGUI项目&#xff1a; open QtCreator —> select Creator Pr…

C语言如果变量全部在全局内存空间会怎么样

结论先行 应该根据内存使用的生命周期&#xff0c;选择合适的内存空间应该尽量使用连续内存如果不想在设计封装性上付出太多代价&#xff0c;全部放入全局空间也比较可取 空间类型特点全局空间生命周期最久&#xff0c;空间连续&#xff0c;变量分配紧致&#xff0c;但存在浪…

You must call removeView() on the child‘s parent first.异常分析及解决

问题描述 对试图组件快速的左右滑动过程&#xff0c;发现某一张图片没加载出来&#xff0c;偶现crash 问题分析 view在上次已经是某个ParentView的child&#xff0c;然而现在又把它做为另外一个view的child&#xff0c;于是出现一个view有两个parent。所以就产生了这个错误。…

创新工具|AI革新内容营销:策略、工具与实施指南

探索如何利用人工智能&#xff08;AI&#xff09;提升内容营销策略&#xff0c;从SEO优化到个性化推荐。本指南详细介绍了11款顶尖AI工具&#xff0c;旨在帮助中国的中高级职场人士、创业家及创新精英高效地策划和生成引人入胜的内容&#xff0c;同时确保内容的专业性、权威性和…

2.OpenFeign 入门与使用

2.OpenFeign 入门与使用 1.什么是 OpenFeign?2.OpenFeign 基础使用2.1 添加依赖2.2 配置 Nacos 服务端信息2.3 项目中开启 OpenFeign2.4 编写 OpenFeign 调用代码2.5 调用 OpenFeign 接口代码 3.超时重试机制3.1 配置超时重试3.2 覆盖 Retryer 4.自定义超时重试机制4.1 自定义…

vue 使用 export default

<script>export default {data() {return {x1: undefined,x2: [],x3: {}}},methods: {t1() {...},t2() {}}} </script> export default是ES6的语法&#xff0c;意思是将这个东西导出&#xff0c;你要import 引入东西&#xff0c;导出了才能引用&#xff0c;data是…

golang通过go-aci适配神通数据库

1. go-aci简介 go-aci是神通数据库基于ACI(兼容Oracle的OCI)开发的go语言开发接口&#xff0c;因此运行时需要依赖ACI驱动和ACI库的头文件。支持各种数据类型的读写、支持参数绑定、支持游标范围等操作。 2. Linux部署步骤 2.1. Go安装&#xff1a; 版本&#xff1a;1.9以上…

Java面向对象程序设计-对象数组的 for each 循环

这是翁恺老师课程3.2.2对象数组中的示例代码&#xff1a; class Value{private int i;public void set(int i){this.ii;}public int get(){return i;} }public class NoteBook {public static void main(String[] args) {Value[] a new Value[10];for (int i 0; i < a.…