关于Redis面试题

news2025/1/16 1:43:49

前言

之前为了准备面试,收集整理了一些面试题。
本篇文章更新时间2023年12月27日。
最新的内容可以看我的原文:https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv

Redis

是什么

全名:远程字典服务。这是一个开源的在内存中的数据结构存储系统,可以用作数据库、缓存、消息中间件

应用场景

在统计方面的场景

有哪些基本数据类型?

有哪些底层数据结构?

sorted set为什么使用跳表而不是平衡树?

首先,跳表实现起来比平衡树简单,插入、删除操作不需要进行平衡,所以性能也比平衡树好些;
其次,从空间效率的角度来看,跳表的索引占用的空间更加少一点,而平衡树还要在在每个节点维护平衡因子;
然后,还有就是并发度,跳表的插入、删除操作,只需要修改相邻节点的指针即可,平衡树还需要调整多个节点,所以,跳表可以支持更多的同时进行修改。

压缩列表的结构

由头部、数据中部、以及一个结尾符号组成。
头部内容包括 压缩列表大小、尾节点的偏移量、数据条目的个数。

谈谈redis的对象机制(redisObject)

redisObject是一个通用的基础结构,可以统一的表示各种数据类型,降低复杂度;
同时,配合共享内存池,可以复用redisObject对象,减少内存分配,避免构造对象的开销。

其中,它的结构主要由两大部分组成:元数据 + 数据的指针或实际数据值。

元数据就包括 数据类型type、底层树结构encoding、最后一次被访问时间lru,以及引用计数refcount。

处理问题思路导图

为什么要设计sds?

回答这个问题之前,先简单说明一下sds的数据结构,数据结构包括三个属性:记录空闲空间的free,记录当前内容长度的length、以及存储数据的buf数组。
image.png

数据结构有哪些

五种数据类型:string、list、sorted set、set、hash
其它数据结构:HyperLogLog、Geo、、Push/sub
其它的还有Redis Moudle、BloomFilter等

单线程还是多线程

Redis6.0+
读写还是单线程(主线程),处理网络请求、结果回写用多线程处理(IO线程并行处理,处理期间主线程阻塞)。

聊聊持久化机制

RDB+AOF

说一下 Copy On Write 技术

多个线程共享内存资源,当发生修改的时候,就复制一份出来。

Redis在使用RDB进行持久化的时候,会fork一个子线程执行持久化工作,子线程跟主线程共享内存,子线程遍历读取数据写入到磁盘,如果数据发生改动,主线程会先复制一份再修改。

缓存淘汰策略

细分的话有8种。
根据情况大体可以分为两类,一类是针对过期的key,另一类是内存满的时候触发。
更具体一点的话,就有随机淘汰、最近最久未使用的、最近最少使用、比较早过期的

MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如 何保证 redis 中的数据都是热点数据?

核心思想是LRU:最近最少使用。
将非热点数据淘汰掉。
具体的策略包括针对过期的key进行被动淘汰的策略、以及主动进行缓存淘汰的策略。

假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以 某个固定的已知的前缀开头的,如果将它们全部找出来?

scan指令

如何应对Redis变慢

预防:避免单线阻塞操作
image.png

  • 大key操作、释放大量内存、聚合计算等
  • 生成快照、AOF刷盘
  • 集群之间传输、加载快照
  • 数据迁移

硬件:CPU结构对性能的影响
观察上下文切换情况:绑核减少切换次数。
在一些处理器架构下,考虑把网络中断程序核Redis主线程绑在一个CPU:避免远端内存访问
注意避免主线程跟子线程竞争CPU。
是否真的变慢了?
使用redis-cli --latency -h host -p port指令查看最大延迟。
真的慢了!重点三个方面入手

  • 自身特性:注意指令的一个时间复杂度、避免大面积key过期
  • 文件系统:避免虚拟内存交换
  • 操作系统:可以考虑关闭内存大页,避免修改10b数据就要拷贝2M内存也的情况

Redis事务的三个阶段

开启事务、加入命令、执行事务

Redis为什么不支持回滚

从设计层面来看,这个可以让redis更简单快速;
对于开发者来说,语法错误的问题应该在开发中就要发现,而不是在生产环境发生。

Redis key 的过期时间和永久有效分别怎么设置?

默认过期。
如果设置了过期时间,想要设置为永久,可以使用PERSIST命令。

主从库网络断开了怎么办?

从库发送同步(psync)命令给主库,主库会对照当前offset,判断进行全量同步还是增量同步。

Redis 1主4从,5个哨兵,哨兵配置quorum为2,如果3个哨兵故障,当主库宕机时,哨兵能否判断主库“客观下线”?能否自动切换?

能判定客观下线,但是不能进行自动切换。

说说Redis哈希槽的概念?

随着数据量的增加,我们进行一些阻塞主线程的一些操作的时候,操作带来的影响就会越来越明显,比如RDB持久化操作,所以,这时候我们可能需要进行扩展,对数据进行切片,将数据分散到不同的实例上,在这方面,官方提供了redis cluster方案。
redis cluster采用了哈希槽,处理数据和实例之间的映射关系。
客户端在跟集群建立连接的时候,会拿到槽的分配信息,通过计算key映射到那个槽,来定位要发送的实例。
image.png
image.png

为什么是16384个?

设计这从两个方面回答了这个问题:

  1. 降低消息大小:一万六千多个槽,心跳包大小为2K,相比与6万多的槽,小很多,可以节省带宽。
  2. 集群规模设计考虑:集群最多支持1000个分片,假如1万六千个槽在分配均匀的情况下,分片平均分到的槽不至于太小。

Redis集群会有写操作丢失吗?为什么?

会丢失,Redis不保证强一致性。

redis实现分布式锁实现?RedLock?

SETNX:key不存在时设置key,成功则返回1。
RedLock:想集群多个节点请求获取锁,当半数节点成功获取到锁时,才算获取锁成功。

redis缓存有哪些问题,如何解决?

redis和其它数据库一致性问题如何解决?

主从数据不一致问题?

问题:主库修改了key,从库没有及时更新。

原因:由于网络延迟、从库在执行高复杂命令等。

处理:外部程序监控复制进度、保证网络通常。

主从模式下在从库读到过期数据

升级版本、设置一个过期时间为一个具体的时间点。

缓存问题:雪崩、击穿、穿透

数据量倾斜问题

原因分析

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

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

相关文章

中职网络安全Web2003-2——Web渗透测试

需要环境或换,有问题可以私信我或加Q 1.通过URL访问http://靶机IP/1,对该页面进行渗透测试,将完成后返回的结果内容作为Flag值提交; FLAGflag{htmlcode} 2.通过URL访问http://靶机IP/2,对该页面进行渗透测试&#xff…

设计模式(4)--对象行为(6)--备忘录

1. 意图 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 这样以后可以将该对象恢复到原先保存的状态。 2. 三种角色 原发器(Originator)、备忘录(Memento)、负责人(Caretaker) 3. 优点 3.1 保持了封装边界。屏蔽了原发器的…

汇编语言学习中的Dosbox自动配置方法

学到期末才发现可以自动配置 一、先找到dosbox的下载/安装路径 二、打开其下的Dosbox *.**(这里是版本号) Options.bat 三、在其打开的文件的最下面输入你经常打开dosbox要输入的内容 例如: mount c e:\masm c:

C++day3作业

#include <iostream>using namespace std;class Person {int *age;string &name; public: // Person() // {// }Person(int a,string &b):age(new int(a)),name(b){cout << "Person的有参构造" << endl;}Person(const Person &am…

关于设计模式、Java基础面试题

前言 之前为了准备面试&#xff0c;收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文&#xff1a;https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv 设计模式 单例共有几种写法&#xff1f; 细分起来就有9种&#xff1a;懒汉&#x…

信号与线性系统翻转课堂笔记15——离散LTI系统模型分析

信号与线性系统翻转课堂笔记15——离散LTI系统模型分析 The Flipped Classroom15 of Signals and Linear Systems 对应教材&#xff1a;《信号与线性系统分析&#xff08;第五版&#xff09;》高等教育出版社&#xff0c;吴大正著 一、要点 &#xff08;1&#xff0c;重点&…

Java 基础学习(十八)多线程进阶、网络编程基础

1 并发工具包 1.1 并发工具包概述 1.1.1 什么是并发工具包 Java并发工具包是指java.util.concurrent&#xff08;简称JUC&#xff09;&#xff0c;在Java 5 版本中添加。JUC中包含了大量在并发应用开发中非常实用的工具类。 行业中说的JUC一般包含java.util.concurrent包、…

C# WPF上位机开发(报表导出)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于在工厂上班的小伙伴来说&#xff0c;导出生产数据、生成报表&#xff0c;这是很习以为常的一个工作。之前的文章中&#xff0c;虽然我们也介绍…

【10】ES6:Promise 对象

一、同步和异步 1、JS 是单线程语言 JavaScript 是一门单线程的语言&#xff0c;因此同一个时间只能做一件事情&#xff0c;这意味着所有任务都需要排队&#xff0c;前一个任务执行完&#xff0c;才会执行下一个任务。但是&#xff0c;如果前一个任务的执行时间很长&#xff…

踩坑RV1106板端部署rknn模型

文章目录 1、交叉编译2、板上跑通3、验证自己模型 1、交叉编译 官方给的一个流程: RKNN 模型推理测试为了避免踩坑在开头提出来 按照官方的流程可以跑通&#xff0c;他自己提供的yolov5s.rknn&#xff08;640*640&#xff09;的模型&#xff0c;但是跑自己的模型的时候加载就会…

SAP VA01 创建带wbs号的销售订单包 CJ067的错误

接口错误提示如下 SAP官方 CJ067 124177 - VA01: CJ067 during WBS acct assgmt with a different business area S4的core 刚好能用上 实施 这个note后成功

「Kafka」生产者篇

「Kafka」生产者篇 生产者发送消息流程 在消息发送的过程中&#xff0c;涉及到了 两个线程 ——main 线程和Sender 线程。 在 main 线程中创建了 一个 双端队列 RecordAccumulator。 main线程将消息发送给RecordAccumulator&#xff0c;Sender线程不断从 RecordAccumulator…

多线程编程(三)互斥量

因为他继承于QObject类所以需要构造函数和析构函数。 有几个人就创建几个线程。

【SAM系列】Auto-Prompting SAM for Mobile Friendly 3D Medical Image Segmentation

论文链接&#xff1a;https://arxiv.org/pdf/2308.14936.pdf 核心&#xff1a; finetune SAM,为了不依赖外部prompt&#xff0c;通过将深层的特征经过一个编-解码器来得到prompt embedding&#xff1b;finetune完之后做蒸馏

Visual Studio Code安装下载及安装自用版

Visual Studio Code安装下载及安装自用版 vscode 我愿称之为最强&#xff0c;赶紧下载吧&#xff0c;用起来再说。微软牛逼。 安装过程也非常简单。 一、下载 Visual Studio Code下载地址 1.选择要下载的客户端的版本&#xff0c;直接下载稳定版的 注意&#xff1a; 下载后&…

OpenEular23.09(欧拉)操作系统为企业搭建独立的K8S集群环境,详细流程+截图

1.环境&#xff1b; win10&#xff0c;vmware16 pro&#xff0c;openeular23.09 集群模式&#xff1a;一主二从 主机硬件配置 主机名IP角色CPU内存硬盘k8s-master01192.168.91.100master4C4G40Gk8s-worker02192.168.91.101worker(node)4C4G40Gk8s-worker03192.168.91.102work…

Matlab:非线性规划

1、语法&#xff1a; xfmincon(fun,x0,A,b) xfmincon(fun,x0,A,b,Aeq,beq) xfmincon(fun,x0,A,b,Aeq,beq,lb,ub) xfmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) xfmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) xfmincon(problem) [x,fval]fmincon(___) [x,fval,exitflag,…

如何在Mac中设置三指拖移,这里有详细步骤

三指拖移手势允许你选择文本&#xff0c;或通过在触控板上用三指拖动窗口或任何其他元素来移动它。它可以用于快速移动或调整窗口、文件或图像在屏幕上的位置。 然而&#xff0c;这个手势在默认情况下是禁用的&#xff0c;因此在本教程中&#xff0c;我们将向你展示如何在你的…

掌汇云 | 公司库聚合企业,为垂直领域提供产品与服务展示窗口

11月29日晚&#xff0c;拼多多美股盘中市值首次超越阿里巴巴。拼多多是赢了&#xff0c;但也有人说阿里未必就输了&#xff0c;因为阿里拼的是整个阿里生态。 阿里生态使其庞大且屹立不倒&#xff0c;拼多多将社交用于撮合交易&#xff0c;通过平台连接消费者和供应商&#xf…

基于STM8S103F3P6的超声波测距仪设计

大三的时候给大四学长做的毕业设计题目 文章目录 1 绪论1.1 设计背景1.2 设计的主要任务 2 超声波测距基本理论及总体架构2.1 基本知识2.1.1 超声波特性2.1.2 超声波传感器2.1.3 超声波测距原理 2.2 总体架构2.2.1 设计原则2.2.2 总体方案介绍 2.3 主要器件选择与介绍2.3.1 主控…