Redis常见面试题(一)

news2025/4/9 14:46:31

目录

1、Redis是什么?

2、Redis有哪些应用场景?

3、Redis有什么优势?

4、Redis为什么这么快?

5、Redis主要消耗什么物理资源?

6、Redis为什么把所有数据放到内存中?

7、Redis命令是原子性的吗?

8、Redis磁盘快照操作是原子的吗?

9、Redis怎么测试连通性?

10、Redis到底是单线程还是多线程?

1、Redis单线程到底指什么?

2、Redis不仅仅是单线程

3、为什么网络处理要引入多线程?


1、Redis是什么?

Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis 的数据是存在内存中的,所以读写速度非常快,被广泛应用于缓存方向。Redis可以将数据写入磁盘中,保证了数据的安全不丢失,而且Redis的操作是原子性的。

2、Redis有哪些应用场景?

  1. 缓存热点数据,缓解数据库的压力。
  2. 利用 Redis 原子性的自增操作,可以实现计数器的功能,比如统计用户点赞数、用户访问数等。
  3. 简单的消息队列,可以使用Redis自身的发布/订阅模式或者List来实现简单的消息队列,实现异步操作。
  4. 限速器,可用于限制某个用户访问某个接口的频率,比如秒杀场景用于防止用户快速点击带来不必要的压力。
  5. 好友关系,利用集合的一些命令,比如交集、并集、差集等,实现共同好友、共同爱好之类的功能。

3、Redis有什么优势?

  1. 基于内存操作,内存读写速度快。
  2. Redis是单线程的,避免线程切换开销及多线程的竞争问题。单线程是指网络请求使用一个线程来处理,即一个线程处理所有网络请求,Redis 运行时不止有一个线程,比如数据持久化的过程会另起线程。
  3. 支持多种数据类型,包括String、Hash、List、Set、ZSet等。
  4. 支持持久化。Redis支持RDB和AOF两种持久化机制,持久化功能可以有效地避免数据丢失问题。
  5. 支持事务。Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
  6. 支持主从复制。主节点会自动将数据同步到从节点,可以进行读写分离。

4、Redis为什么这么快?

  • 基于内存:Redis是使用内存存储,没有磁盘IO上的开销。数据存在内存中,读写速度快。
  • 单线程实现( Redis 6.0以前):Redis使用单个线程处理请求,避免了多个线程之间线程切换和锁资源争用的开销。
  • IO多路复用模型:Redis 采用 IO 多路复用技术。Redis 使用单线程来轮询描述符,将数据库的操作都转换成了事件,不在网络I/O上浪费过多的时间。
  • 高效的数据结构:Redis 每种数据类型底层都做了优化,目的就是为了追求更快的速度。

5、Redis主要消耗什么物理资源?

Redis是内存数据库,所以主要消耗的肯定是内存。

6、Redis为什么把所有数据放到内存中?

因为Redis的定位就是一个内存数据库。

内存的读取速度是最快的,如果放到硬盘,磁盘I0的速度势必会严重影响Redis的性能,那就和般的关系数据库相比没什么优势可言,而且随着现在内存硬件成本的降低,内存已经不是问题,性能才是关键,现在硬盘只是成为了一种持久化方案而已。

7、Redis命令是原子性的吗?

Redis命令是原子性的,因为Redis 是单线程的,一个操作要么执行,要么不执行,不会被其他线程打断。

8、Redis磁盘快照操作是原子的吗?

是的,Redis 任何命令在内存中是原子操作的,在磁盘快照里同样也是原子的。

9、Redis怎么测试连通性?

先连接上Redis,再使用ping指令。

如:

10、Redis到底是单线程还是多线程?

大家注意审题: Redis是多线程还是单线程?

这个问题你要从多个方面回答,如果你仅仅只回答“单线程”肯定是说不过去的,为什么呢?我们需要和面试官有所可聊

1、Redis单线程到底指什么?

没错,大家所熟知的Redis确实是单线程模型,指的是执行Redis命令的核心模块是单线程的,

而不是整个Redis实例就一个线程 ,Redis 其他模块还有各自模块的线程的。

下面这个解释比较好:

Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的

组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。

因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。

参考

https://www.jianshu.com/p/6264fa82ac33

2、Redis不仅仅是单线程

一般来说Redis的瓶颈并不在CPU,而在内存和网络。如果要使用CPU多核,可以搭建多个

Redis实例来解决。

其实,Redis 4.0开始就有多线程的概念了,比如Redis通过多线程方式在后台删除对象、以及通过Redis模块实现的阻塞命令等。

来源官方的解释:

如果你能说到这里,对Redis单/多线程的理解也有你自己更多的认识了。

另外,2020 年 5 月 2日Redis 6正式发布了,其中有一个是被说了很久的多线程IO

这个Theaded IO指的是在网络10处理方面上了多线程,如网络数据的读写和协议解析等,需要注意的是,执行命令的核心模块还是单线程的。

所以,你要是再把Redis 6.0网络处理多线程这块回答上了,你也不至于“请回”了。

注意:对于新技术的发展和学习不就是我们和面试官的谈资吗?所以你可以去了解redis新出的版本

3、为什么网络处理要引入多线程?

之前的段落说了,Redis 的瓶颈并不在CPU,而在内存和网络。

内存不够的话,可以加内存或者做数据结构优化和其他优化等,但网络的性能优化才是大头,网络IO的读写在Redis整个执行期间占用了大部分的CPU时间,如果把网络处理这部分做成多线程处理方式,那对整个Redis的性能会有很大的提升

网上也有对Redis单/多线程情况下的get/set 操作性能做了对比:

 

从上面的性能测试图来看,多线程的性能几乎是单线程的两倍了,从该文章来看,这个只是简单的针对多线程性能的验证,并没有做很多严谨的测试,不能作为线上指标参考。

但可以知道的是,Redis 在网络处理方面,上了多线程确实会让Redis性能上一个新台阶,不过还需要一些验证与优化。

最后,6.0版本中,IO多线程处理模式默认是不开启的,需要去配置文件中开启并配置线程数,有兴趣的研究下吧。

总结

这篇文章只是对Redis单线程/多线程有个基本的认识和总结,吊打面试官可能还说不上,但是在面对面试官提问的时候,不要只是单纯的说单线程,你要回答的还要比这个更多。

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

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

相关文章

【图像去噪】均值+中值+空间+高斯滤波图像去噪【含GUI Matlab源码 763期】

⛄一、图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,g(x,y&#xff0…

四十六——

四十六、JavaScript——对象 一、对象 数据类型:原始值: 1. 数值 Number 2. 大整数 BigInt 3. 字符串 String 4. 布尔值 Boolean 5. 空值 Null 6. 未定义 Undefinded 7. 符号 Symbol 除了七种原始值之外,后面所用到的数据类型,都…

jsp+ssm计算机毕业设计茶园文化交流平台论文【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

jsp+ssm计算机毕业设计超市收银系统论文【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

【LeetCode101. 对称二叉树】—— 二叉树遍历

101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false提示: …

【探索Spring底层】12.谈谈代理创建器与代理创建时机

文章目录1. 前言2. 谈谈代理创建器3. 代理创建时机是什么时候4. 浅谈Order的失效场景4. 浅谈Order的失效场景5. 高级切面如何转为低级切面1. 前言 Spring中有两种切面,一种是Aspect,另一种是Advisor 其中Aspect是高级切面,Advisor是低级切面…

【网站架构】网站系统怎么才是安全的?安全验收?等保、网络安全、SQL盲注、https、鉴权

大家好,欢迎来到停止重构的频道。 本期我们讨论网站系统的安全性。 安全的重要性不言而喻,大部分安全问题确实是安全扫描后根据指引修改就可以了。 但是仍有一些问题修改起来是特别麻烦的,这些问题会严重影响上线时间。 本期我们的重点不…

共享购模式简单又好玩,撑起市场的半边天,推动实体产业改造上级

在2022年1月18日,国家发展改革委等七部局下发《促进消费实施方案》的通知,确立了”消费送积分”的新形式。该政策的出台,表明了政府探索实施全国绿色消费积分制度,鼓励地方结合实际建立本地绿色消费积分制度,以兑换商品…

S3 Drive支持以及FIPS 140-2兼容性

S3 Drive支持以及FIPS 140-2兼容性 在Windows Arm64上运行-添加了在Microsoft Windows for Arm64上的功能。无需额外下载,安装程序将为您的系统选择正确的驱动程序和库。 现在符合FIPS 140-2。 现在,您可以使用新的CacheOnlyFiles设置阻止上载临时(或其他…

基于高分辨率时频分析的单通道地震数据自动噪声衰减方法(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 记录的地震信号常常被噪声破坏。本文使用了一种基于高分辨率时频分析的单通道地震数据自动噪声衰减方法。同步压缩是一种时频重…

MySQL——保证主从一致

binlog 可以用来归档,也可以用来做主备同步,备库执行了 binlog 就可以跟主库保持一致。 MySQL 主备的基本原理 如图 1 所示就是基本的主备切换流程。 在状态 1 中,客户端的读写都直接访问节点 A,而节点 B 是 A 的备库&#xff…

Java安全--CC4

CC4 环境提一小嘴: CC4利用的是commons-collections4,所以我们需要导入新的依赖,地址:https://mvnrepository.com/artifact/org.apache.commons/commons-collections4/4.0 我们先来关注一下利用链: 后半段是一样的&am…

本地运行好好的 Java 程序, 一发布到线上就报错的灵异事件终于让我碰到了

说明 本文涉及的相关软件版本如下: mybatis 3.4.xHotSpot JDK1.8Windows 11IDEA 2022.3 先看一段 mybatis 相关的代码 今天一个朋友丢给我如下一段代码: 然后跟我讲为什么本地是好好的, 发布到线上执行就报错。 BlogMapper.java public…

【python机器学习】K-Means算法详解及给坐标点聚类实战(附源码和数据集 超详细)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 人们在面对大量未知事物时,往往会采取分而治之的策略,即先将事物按照相似性分成多个组,然后按组对事物进行处理。机器学习里的聚类就是用来完成对事物进行分组的任务 一、样本处理 聚类…

技术原理|Hologres Binlog技术原理揭秘

作者:张高迪(花名杳天),Hologres研发。 同传统MySQL数据库,Hologres支持Hologres binlog,记录数据库中所有数据的变化事件日志。通过Hologres binlog,可以非常方便灵活的实现数据之间的复制、同…

“电池黑马”瑞浦兰钧增速惊人,动储双起飞

撰稿 | 多客 来源 | 贝多财经 12月14日,“电池黑马”瑞浦兰钧能源股份有限公司(以下简称“瑞浦兰钧”)向港交所主板提交上市申请,摩根士丹利和中信证券为其联席保荐人。至此,国内动力电池装机量排名前十的企业均已上…

DB Optimizer Multiplatform SQL评测和调优IDE

DB Optimizer Multiplatform SQL评测和调优IDE 增加了对最新版本Log4j的支持。 改进了分析会话功能,可提前提醒用户可能有问题的SQL。 DB Optimizer可以快速发现、诊断和优化性能较差的SQL。DBOptimizer使DBA和开发人员能够在整个开发生命周期中优化SQL性能&#xf…

合并多个有序数组

合并多个有序数组题目描述思想代码实现变形题目题目描述 我们现在有多个已经有序的数组,我们知道每个有序数组的元素个数和总共的有序数组的个数,现在请设计一个算法来实现这多个有序数组的合并(合并成一个数组); 例如&#xff1a…

Chrome浏览器可以用ChatGPT了?

程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store 最近这段时间想必 和我一样,都被chatGPT刷屏了。 在看到网上给出的一系列chatGPT回答问题的例子和自己亲自体验之后,的确发现它效果非常令人惊艳。 chatGPT的火热程度在开源社…

turbo编码原理

一、原理 Turbo的编码器由两个并行的分量编码器组成。分量编码器的选择一般是卷积码。在Turbo码中,输入序列在进入第二个编码器时须经过一个交织器 ,用于将序列打乱。两个编码器的输出共同作为冗余信息添加到信息序列之后,对抗信道引起的错误…