Redis面试题——第四篇

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命令,目标节点可能会因为还没有正式接管哈希槽而拒绝处理请求。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

模拟电路设计期末速成总结

模拟电路设计期末速成总结 模拟电路设计是电子工程和电气工程专业中的一门重要基础课,主要研究连续时间信号(模拟信号)的处理和应用。期末复习时,针对这门课可以分为以下几个关键内容进行速成总结。 一、基本概念与元件 模拟信号…

C++设计模式——代理模式

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言代理模式的定义代理模式的具体实现 引言 我们经常听到代理服务器「代理服务器是一个中间服务器,能够接收客户端的请求,并代表客户端向服务器发起请求,然后将服…

经典文献阅读之--RGBD GS-ICP SLAM(结合ICP和3D GS构建最快的稠密SLAM)

0. 简介 同时定位与地图构建(SLAM)的密集表示在机器人技术、虚拟现实(VR)和增强现实(AR)应用中扮演了关键角色。在密集表示SLAM的最新进展中,利用神经场景表示和3D高斯表示以实现高保真的空间表…

Mycat引领MySQL分布式部署新纪元:性能与扩展性的双重飞跃

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#…

使用OneAPI+Ollama+Dify搭建一个兼容OpenAI的API发布及AI应用开发系统(三)Dify的安装及配置

在GitHub中的AI工作流短代码平台中,Dify获星一直名列前茅,目前已达48K星,其工作稳定性也是非常的高,在这里我们介绍一下Dify的安装。 由于Dify的结构非常的复杂,我们这里介绍Docker的方式进行安装,硬件的最…

Nvidia Jetson Orin平台部署CenterPoint模型

最近尝试将CenterPoint模型部署到Orin平台,网络上教程很多,也很杂乱,于是便整理一版自用。 主要根据NVIDIA Lidar AI Solution进行复现。并在此基础上进行补充 Orin平台: python:3.8 CUDA:11.4 torch:1.14.0 torchvision:0.15.1 TensorRT: 8.5.2.1 在Compile &&a…

Java并发编程实战 08 | 彻底理解Shutdown Hook

钩子线程(Hook Thread)简介 在一个 Java 应用程序即将退出时(比如通过正常执行完成或通过用户关闭应用程序),通常需要进行一些清理操作,例如: 释放资源(如文件句柄、网络连接&…

解锁C++继承的奥秘:从基础到精妙实践(下)

文章目录 前言🥐五、多继承,菱形继承和菱形虚拟继承🧀5.1 多继承🧀5.2 菱形继承🧀5.3 虚拟继承(解决菱形继承问题)5.3.1 虚拟继承的语法:5.3.2 虚拟继承示例: &#x1f9…

大舍传媒-海外媒体发稿:为您打造全球品牌影响力

大舍传媒-海外媒体发稿:为您打造全球品牌影响力 在当今全球化的商业环境中,企业若想在激烈的市场竞争中脱颖而出,拓展全球市场,提升品牌影响力至关重要。大舍传媒的海外媒体发稿服务,正是您实现这一目标的得力助手。 …

面对服务器掉包的时刻困扰,如何更好的解决

在数字化时代,服务器的稳定运行是企业业务连续性的基石。然而,服务器“掉包”现象,即数据包在传输过程中丢失或未能正确到达目的地的情况,却时常成为IT运维人员头疼的问题。它不仅影响用户体验,还可能导致数据不一致、…

【AI 新观察】“转人工!转人工!”——智能客服痛点与破局之路

在当今数字化时代,智能客服在电商等众多领域被广泛应用,然而,一句又一句“转人工!转人工!”却常常暴露出智能客服存在的痛点。一、智能客服之痛 1. 理解偏差引不满 智能客服在理解客户问题时,常常出现偏差…

mybatisPlus对于pgSQL中UUID和UUID[]类型的交互

在PGSQL中&#xff0c;有的类型是UUID和UUID[]这种类型&#xff0c;在mybatis和这些类型交互的时候需要手动设置类型处理器才可以&#xff0c;这里记录一下类型处理器的设置 /*** UUID类型处理器*/ public class UUIDTypeHandler extends BaseTypeHandler<UUID> {/*** 获…

Golang | Leetcode Golang题解之第478题在圆内随机生成点

题目&#xff1a; 题解&#xff1a; type Solution struct {radius, xCenter, yCenter float64 }func Constructor(radius, xCenter, yCenter float64) Solution {return Solution{radius, xCenter, yCenter} }func (s *Solution) RandPoint() []float64 {r : math.Sqrt(rand.…

热更新解决方案2 —— Lua语法相关知识点

概述 开发环境搭建 Lua语法 1.第一个Lua程序 2.变量 print("******变量*******"); --lua当中的简单变量类型 -- nil number string boolean -- lua 中所有的变量声明 都不需要声明变量类型 它会自动的判断类型 -- 类似C# 中的var --lua中的一个变量 可以随便赋值 ——…

Product1M 深度理解 PPT

系列论文研读目录 文章目录 系列论文研读目录 模态内检索&#xff1a;是指在同一模态&#xff08;例如&#xff0c;图像、文本或音频&#xff09;中进行的检索任务。它通常涉及在同一类型的数据中查找相关项。比如下面图像只能查询图像&#xff0c;文本只能查询文本&#xff0c…

modbus tcp wireshark抓包

Modbus TCP报文详解与wireshark抓包分析_mbap-CSDN博客 关于wireshark无法分析出modbusTCP报文的事情_wireshark 协议一列怎么没有modbus tcp-CSDN博客 使用Wireshark过滤Modbus功能码 - 技象科技 连接建立以后才能显示Modbus TCP报文 modbus.func_code 未建立连接时&…

D36【python 接口自动化学习】- python基础之函数

day36 函数的定义 学习日期&#xff1a;20241013 学习目标&#xff1a;输入输出与文件操作&#xfe63;-49 函数定义&#xff1a;如何优雅地反复引用同一段代码&#xff1f; 学习笔记&#xff1a; 函数的用途 定义函数 调用函数 # 定义函数 def foo():print(foo)print(foo …

胤娲科技:AI短视频——创意无界,即梦启航

在这个快节奏的时代&#xff0c;你是否曾梦想过用几秒钟的短视频&#xff0c;捕捉生活中的每一个精彩瞬间&#xff1f;是否曾幻想过&#xff0c;即使没有专业的摄影和剪辑技能&#xff0c;也能创作出令人惊艳的作品&#xff1f; 现在&#xff0c;这一切都不再是遥不可及的梦想。…

一区鱼鹰优化算法+深度学习+注意力机制!OOA-TCN-LSTM-Attention多变量时间序列预测

一区鱼鹰优化算法深度学习注意力机制&#xff01;OOA-TCN-LSTM-Attention多变量时间序列预测 目录 一区鱼鹰优化算法深度学习注意力机制&#xff01;OOA-TCN-LSTM-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.基于OOA-TCN-LSTM-Attenti…

Mysql(八) --- 视图

文章目录 前言1.什么是视图&#xff1f;2.创建视图3. 使用视图4. 修改数据4.1.注意事项 5. 删除视图6.视图的优点 前言 前面我们学习了索引&#xff0c;这次我们来学习视图 1.什么是视图&#xff1f; 视图是一个虚拟的表&#xff0c;它是基于一个或多个基本表或其他视图的查询…