Redis面试题——第四篇

news2024/10/22 17:17:33

1. Redis主从复制的常见拓扑结构有哪些

  • 一主多从:这是最基本的拓扑结构,包含一个主节点和多个从节点,所有写操作都在主节点上执行,而读操作可以在从节点上进行,以提高读取速度和负载均衡。
    在这里插入图片描述
  • 树状主从结构:从节点也可以作为其他从节点的主节点,这样形成了一个层次结构,主节点负责写操作,而从节点负责读操作,并将数据再次复制到更下一级的从节点。
    在这里插入图片描述
  • 主主结构(双主或者多主)
    在这种拓扑中,有两个或者多个主节点,他们之间相互复制数据,这种结构提高了系统的写能力和容错性。

2. List介绍

  • 常见命令
lpush:将一个或者多个值插入到列表头部,列表不存在,一个新的列表会被创建。
rpush:将一个或者多个值插入到列表尾部
lpop:移除并返回列表头部的元素
rpop:移除并返回列表尾部的元素
lrange:获取列表指定范围内的元素
lindex:通过索引获取列表中的元素
llen:获取列表长度
lset:将列表中指定索引的元素设置为另一个值
lrem:移除列表中与参数匹配的元素 lrem mylist 1 a # 从mylist中移除第一个a
ltrim:修剪一个已存在的list,使其只包含指定范围的元素。 ltrim mylist 1 2 # 保留mylist中索引从12的元素。
  • 列表的存储结构
    Redis List类型的底层实现有两种数据结构,Redis会根据列表的长度和每个元素的大小自动选择使用哪种结构。
    • 双向链表:当列表元素较多时,使用双向链表实现,便于从两端快速添加和删除。
    • 压缩列表:当列表元素较少时且总大小较小时,使用内存更节省的压缩列表实现。
  • List使用场景
    • 消息队列:Redis的LPUSH和RPOP组合可以用来实现生产者——消费者模型,将LPUSH用于生产者,RPOP用于消费者,这种方式可以实现简单的消息队列。
    • 任务调度:可以使用LPUSH和BRPOP来实现任务调度,将任务放入队列中,消费者通过阻塞方式从队列中取任务进行处理
    • 聊天记录:可以使用Redis List存储用户聊天记录。
  • 列表操作的性能问题
    • 大列表操作:当列表非常大时,lrange,lrem可能会导致Redis阻塞,因为Redis是单线程的,因此,对大列表的操作应该尽量避免。
    • 列表裁剪:使用ltrim命令对列表进行裁剪,以控制列表的大小,避免列表无限增长导致内存占用过高。例如,ltrim mylist 0 99,只保留前100个元素。

3. Redis中ZipList和Quicklist的特点是什么

Ziplist

  • 简单、紧凑、连续存储,适用于小数据量场景,但是对大量数据或者频繁的修改操作不太友好。
  • 适合小数据量存储,例如 短列表、小哈希表等,因为他的内存紧凑,可以大幅减少内存使用

Quicklist

  • 通过将链表和ziplist结合,既实现了链表的灵活操作,又能节省内存。Redis 3.2之后成为List的默认实现。
  • Quicklist是为了替代纯链表设计的,适用于需要频繁的对列表进行插入、删除、查找等操作的场景,并且数据量可能较大,他在存储多个元素时,既保留了链表的灵活性,又具备压缩列表的内存优势。

4. Redis复制延迟的原因有哪些

Redis的复制延迟是指从节点同步主节点数据时可能出现时间延迟。在读写分离场景,这个延迟会导致写入了数据,但去从节点查询的时候无法查到。

可能原因

  • 网络原因
  • 主节点负载过高:主节点接收到大量的写操作,在处理客户端请求的同时,还需向从节点发送复制数据。如果主节点负载较高时,来不及处理从节点复制的请求,就会导致复制延迟。
  • 复制缓冲区溢出
  • 主节点持久化,无法及时响应复制请求:生成RDB快照或者AOF文件重写都会占用大量的CPU和IO资源,可能会影响复制的速度。

5. Redis Cluster模式和Sentinel模式的区别

  • Redis Cluster是Redis集群,提供自动分片功能,将数据自动分布在多个节点上,支持自动故障转移。如果一个节点失败,集群会自动重新配置和平衡,不需要外部介入。
  • Sentinel是哨兵,用于管理多个Redis服务器实例来提高数据的高可用性。当主节点宕机,哨兵会将从节点提升为主节点,他不提供数据分片功能。

如果需要处理大量数据并进行数据分片,应该选择Redis Cluster,他支持水平扩展,适用于大规模数据、高吞吐量场景。

如果只是为了提高Redis实例的可用性,并不需要数据分片,应该选择主从+sentinel,他主要关注故障转移和实例高可用。适用于高可用性、读写分离场景。

6. 在Redis集群中,如何根据键定位到对应的节点

Redis集群将数据分布到16384个哈希槽(slots)中,每个键通过哈希函数计算出一个槽位编号,然后根据槽位编号定位到具体的节点,具体是使用CRC16哈希函数计算键的哈希值,然后对16384取模,得到哈希槽编号。

1. Redis集群节点的通信
Redis集群节点在一开始的时候,只知道自己的槽位,不知道其他节点的槽位。他们之间会通过Gossip协议使用ping命令和pong响应进行通信,彼此之间交换槽位的信息。这样之后,Redis集群的节点之间就互相知道彼此的槽位。
2. 访问Redis集群时,如何得到key所对应的节点
Redis客户端通过key访问数据的时候,可以 将请求打在Redis集群中的任意一个节点

  • Redis客户端使用CRC16算法计算出key的哈希值,然后将哈希值对16384取模,从而计算key最终要落到的槽位。
  • 一般客户端在启动时会从集群中获取哈希槽到节点的关系映射,因此,可以选择对应的节点。
  • 如果节点上有数据则直接返回,如果访问的key不在连接的节点上时,Redis会返回一个重定向命令(Moved或者ASK)。
    • 当客户端收到Moved响应时,表示key所在的哈希槽已经被移动到另一个节点,客户端需要更新哈希槽映射并重试操作。
    • 当客户端收到ASK响应时,表示Redis集群进行伸缩。
  • Redis客户端根据Moved/ASK指令重定向到正确的Redis节点。

3. ASK重定向的工作原理

  • 客户端请求:客户端发送一个命令来访问某个key。
  • 如果该key所在的哈希槽正在从源节点迁移到目标节点,源节点会返回一个ASK重定向指令。
  • 客户端收到ASK重定向后,首先发送一个ASKING命令到目标节点,随后重新发送原始命令到目标节点。

为什么客户端需要先发送一个ASKING命令到目标节点,然后再发送实际的请求?
因为集群扩容还未完成,所以理论新的节点还未完全拥有这个槽,而ASKING命令其实是一个临时授权,告诉目标节点即使该节点还没有正式拥有该哈希槽,也要暂时处理这个请求。如果没有先发送ASKING命令,目标节点可能会因为还没有正式接管哈希槽而拒绝处理请求。

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

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

相关文章

小米澎湃工具箱,一键获取权限

Hyper工具箱已初步支持魅族设备一键获取权限,配置扫描与ROM包索引均已适配Flyme。 支持小米、魅族手机 功能不止刷机、获取权限更多功能下载体验! 下载:https://pan.quark.cn/s/4e78f870813f

试着了解YOLOx

在特征提取上来说,主干部分使用了focus网络结构,对特征点进行了划分,将特征点信息堆叠到通道上。 同时采用CSPnet结构,在残差网络堆叠的同时,构建大的残差边,经过少量处理直接连接到最后。 过去的YOLO将分…

数据库系统概论之关系数据库标准语言SQL(一)【超详细】

教材: 数据库系统概论(第6版)王珊,杜小勇,陈红编著 目录 一、SQL概述 1.1 SQL 的产生与发展 1.2 SQL的特点 1.3 SQL的基本概念 二、数据定义 2.1 数据库的定义 2.2 数据表的定义 2.3 模式的定义 一、SQL概述 1974年IBM为关系DBMS设…

组合式二值编码

论文名称:《A Practical Approach to 3D Scanning in the Presence ofInterreflections, Subsurface Scattering and Defocus》 简介:组合式二值编码(包含传统格雷码,XOR-02,XOR-04,minSW)&…

Java学习Day25:基础篇15:反射

Java 反射(Reflection) 1.前置反应 是 Java 编程语言的一个强大特性,它允许程序在运行时检查或修改类的行为。这包括获取类的信息(如字段、方法、构造函数等),以及动态地创建对象、调用方法、访问和修改字…

linux的学习第二天

1.vmware的功能: 快照 创建快照: 拍摄此虚拟机的快照:记录保存虚拟机的当前状态,如果系统出现故障,可以通过快照还原(错删系统时可以找到快照的系统状态,然后恢复系统) 恢复快照…

java项目之精品在线试题库系统设计与实现源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的精品在线试题库系统设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 精品在线试…

sentinel dashboard分布式改造落地设计实现解释(二)-分布式discovery组件

discovery discovery负责维护app/机器资料库,transport健康检测, transport上下线处理。discovery关键是分布式存储,后续研究一下raft,其复制,状态机,快照技术,但个人觉得,discover…

软件分享 | 截图工具 Snipaste

今天分享: 今日分享的是一款截图界的神器——Snipaste! 特点: 🎨 超清截图: Snipaste的截图功能,清晰度超乎你的想象。无论是工作文档还是游戏画面,都能一键捕捉,细节尽在掌握。 …

Excel:将一列拆分成多列

实现的效果是: 操作步骤如下: 1.选中列 → 点击菜单栏中的"数据" → 分列 2.选择"分列符号",点击下一步 3.我想要按照空格分列,就选择空格 4.点击完成,就可以实现分列的效果了

uniapp学习(004-2 组件 Part.2生命周期)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第31p-第p35的内容 文章目录 组件生命周期我们主要使用的三种生命周期setup(创建组件时执行)不可以操作dom节点…

Shell编程-if判断

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们前面学习了那么多命令,以及涉及到部分逻辑判断的问题。从简单来说,他就是Shell编…

【XYFrame unity框架使用文档】封装unity小框架工具集 —— XYFrame

文章目录 XYFrame介绍优点获取框架源码引入的第三方插件作者信息技术交流群反馈企鹅裙画饼使用文档导入文件目录启动1、单例模式不继承MonoBehaviour的单例模式基类继承MonoBehaviour的单例模式基类 2、Mono管理器3、事件管理系统4、工具类封装unity协程工具,避免 G…

每周心赏|必备AI神器第二弹

大家的假期都是怎么度过的?是已经玩嗨了?还是在家葛优躺,感叹时间飞逝呢? 别急,假期还没完全说拜拜呢!赶紧抓住假期最后的尾巴,和AI神器一起,把快乐放大,不留遗憾&#x…

prompt learning

prompt learning 对于CLIP(如上图所示)而言,对其prompt构造的更改就是在zero shot应用到下游任务的时候对其输入的label text进行一定的更改,比如将“A photo of a{obj}”改为“[V1][V2]…[Vn][Class]”这样可学习的V1-Vn的token…

Docker配置网站环境

Mysql 先安装mysql 启动并后台运行:run -d 容器名称:--name 设置端口映射:-p 主机端口:容器端口 环境变量:-e 最后指定镜像名称 sudo docker run -d \--name mysql\-p 3306:3306\-e MYSQL_ROOT_PASSWORD123456\…

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.0 SP1升级到SP3操作方法(x64)

1、首先安装时候选择升级SQLEXPRADV_x64_CHS.exe。 2、接着安装SQLServer2008R2SP1-KB2528583-x64-sp1补丁后10.50.2500.0。 3、接着安装升级SQLEXPRWT_x64_CHS.exe。 4、继续安装SP3:SQLServer2008R2SP3-KB2979597-x64-CHS。 5、最后安装SP3补丁:SQ…

ARM64使能kdump

摘要 需要使用的工具或者配置如下: 使用kdump-defconfig编译后的kdump内核 : https://download.csdn.net/download/weixin_43412488/89886775https://download.csdn.net/download/weixin_43412488/89886775 引导kdump内核加载的ramdisk: https://download.csdn.net/dow…

【通知】红帽认证:RHCE免费补考福利来袭!

现有2024年第四季度红帽RHCE培训补考政策的通知: 为促进红帽第四季度(10月~12月)RHCE的招生及交付,红帽推出免费补考政策如下: 在此期间参加RHCE(EX200/EX294)考试,且考试订单在有效期内,考试如有未能通过的科目&…

移动技术开发:备忘录

1 实验名称 备忘录 2 实验目的 掌握SQLite数据库的基本操作&#xff0c;实现备忘录基本功能。 3 实验源代码 布局文件代码&#xff1a; &#xff08;1&#xff09;activity_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout …