[编程技术] Redis为什么这么快 - 秒杀面试官系列
作者:精品下载站 日期:2023-01-02 00:00:51 浏览:35 分类:编程开发
前言
Redis作为非关系型内存数据库,只要是一个互联网公司都会使用到。Redis相关的问题可以说是面试必问的。
而作为一个程序员,尤其是一个后端程序员,如果你会Redis,毫不夸张地说,面试通过率可以增加50%。
你肯定听说过:Redis很快,有多快呢?
首先,Redis有多快?它的单机QPS
可达100K
。
我们先来看看Redis官网的性能基准数据。
Redis在数据大小为1000 byte
的时候能达到100K
以上的QPS。
而在同等机器配置下的MySQL的QPS大概在2k ~ 4k
左右。
所以Redis作为内存数据库优势就出来了。
Redis为什么这么快
面试官:Redis为什么这么快。
你:因为它是基于内存的。
面试官:还有吗?
你:嗯,这个。。。
面试官:那你先回去等通知吧。
这篇文章就带你理解Redis为什么这么快,让你面试不再卡壳。
Redis这么快有至少4个原因。
- 基于内存
- IO多路复用
- 单线程模型
- 高效的自定义数据结构
基于内存
我们来看看计算器硬件的运算速度。硬件的速度是金字塔模型,最慢的是机械硬盘,处理速度大概为1-10毫秒,最快的是寄存器,处理速度为0.3纳秒。
而Redis使用RAM内存
储存的数据库。相对于数据存在磁盘的数据库,比如MySQL
,就省去磁盘磁盘I/O的消耗。MySQL等磁盘数据库,需要建立索引来加快查询效率。
像Redis这样把数据存在内存中,读写都直接对数据库进行操作,天然地就比硬盘数据库少了到磁盘读取数据的这一步,而这一步恰恰是计算机处理I/O的瓶颈所在。
这也就是为什么Redis的QPS能达到100K
,而同等配置下的MySQL的单机性能只有~4K
的原因。
IO多路复用
什么是I/O多路复用?
IO多路复用其实就是一种同步IO模型,它实现了一个线程可以监视多个文件描述符;一旦某个文件描述符就绪,就能够通知应用程序进行相应的读写操作。
redis的网络事件处理器是基于Reactor模式,又叫做文件事件处理器。
文件事件处理器
使用I/O多路复用
来同时监听多个套接字,并根据套接字执行的任务关联到不同的事件处理器。
文件事件以单线程方式运行,但通过使用I/O多路复用
程序来监听多个套接字,文件事件处理器
实现了高性能的网络通信模型。
Redis 在处理客户端的请求时,包括接收
(socket读)、解析
、执行
、发送
(socket 写) 等都由一个顺序串行的主线程处理,这就是所谓的单线程
。
单线程模型
然后我们讲讲单线程模型。
Redis为什么使用单线程,以及是不是真的单线程呢?
Redis官网说了为什么使用单线程:
It’s not very frequent that CPU becomes your bottleneck with Redis, as usually Redis is either memory or network bound.
一句话解释就是:因为CPU不是Redis的瓶颈,Redis的瓶颈是内存和网络带宽。
线程之间的轮换以及上下文切换是需要花费很多时间的。
单线程模型在这种情况下可以省去上下文切换
和加锁
的开销。
那Redis是不是单线程呢?
2017年6月,Redis发布Redis 4.0,除了主处理线程,还会有一些线程来处理一些非阻塞命令,
比如 UNLINk
,FLUSHALL ASYNC
,FLUSHDB ASYNC
等非阻塞删除操作。
2020年5月,Redis发布Redis 6.0, 支持多线程IO
来接收
,发送
和解析
命令,具体的执行命令仍然是单线程的。
所以Redis主要的命令处理一直都是单线程的。
高效数据结构
上面我们说到的都是硬件层和系统层上Redis的支持或者优化。
下面我们讲讲Redis本身逻辑层面快的原因:它高效的数据结构。
Redis中的数据结构是专门进行设计的;
如果你对Redis有一点点了解,那么你一定能说出来,Redis有5种基本数据结构。
- String (字符串)
- Hash (散列)
- List (列表)
- Set (集合)
- ZSet/Sorted Set (有序集合)
实际上Redis还有几种高级数据结构可能你如果知道会让面试官眼前一亮:
- Geo (地理空间)
- Bitmap (位操作)
- Hyperloglog (基数统计)
这些数据结构的实现还通常不止一种,会根据你的操作的数据长度或者类型自动切换底层模型。
其中Redis使用了这些底层模型作为数据结构的实现:
- SDS 简单动态字符串
- HashTable
- ZipList
- LinkedList
- IntSet
- SkipList
而每一种数据结构都会使用多种底层结构模型来实现。
由于这些数据结构和底层模型的复杂性,每一个都可以单独制作一篇视频讲解,我这里就简单说一下其中的两种。
SDS
String数据结构使用SDS底层实现,SDS是简单动态字符串。
它有个数据结构名字叫sdshdr
,里面有三个属性。
- length: 记录字符串的长度
- free: 记录字符串未使用的空间的长度
- buf,char类型的数组,保存字符,以空字符
结尾。- 获取字符串长度时间复杂度为O(1)
它相对于C语言字符串有以下好处:
- 记录长度防止缓存区溢出
- 减少因修改字符串导致的内存重分配次数
- 可以存放二进制数据
SkipList
SkipList是有序集合 ZSet的底层实现之一,ZSet是我们做排行榜经常使用的数据结构。
Redis使用了SkipList,用于快速查找的分层索引,方便范围查找。 Redis使用SkipList而不是用平衡树的主要原因有:
- 平衡树的插入和删除引发子树调整,逻辑复杂,SkipList相对简单很多
- 平衡树每个节点包含两个指针,SkipList平均不到2个指针,内存上更有优势。
后续
所以我们可以看到,Redis的每一个设计,都是非常优秀的,充分的利用了硬件,网络,线程和内存。所以Redis才会这么快。
由于篇幅限制,关于Redis数据结构的部分我也只能简单描述下,后续我会花时间和精力来做一整套的Redis教程,带你完善你的Redis技能栈,轻松通过面试,斩获Offer。欢迎关注我获取最新更新吧。
<全文完>
猜你还喜欢
- 03-29 [编程相关] Winform窗体圆角以及描边完美解决方案
- 03-29 [前端问题] has been blocked by CORS policy跨域问题解决
- 03-29 [编程相关] GitHub Actions 入门教程
- 03-29 [编程探讨] CSS Grid 网格布局教程
- 10-12 [编程相关] python实现文件夹所有文件编码从GBK转为UTF8
- 10-11 [编程算法] opencv之霍夫变换:圆
- 10-11 [编程算法] OpenCV Camshift算法+目标跟踪源码
- 10-11 [Python] python 创建 Telnet 客户端
- 10-11 [编程相关] Python 基于 Yolov8 + CPU 实现物体检测
- 03-15 [脚本工具] 使用go语言开发自动化脚本 - 一键定场、抢购、预约、捡漏
- 01-08 [编程技术] 秒杀面试官系列 - Redis zset底层是怎么实现的
- 01-05 [编程技术] 《Redis设计与实现》pdf
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[短剧合集] 2025年06月2日 精选+付费短剧推荐39部
[软件合集] 25年6月2日 精选软件18个
[软件合集] 25年6月1日 精选软件15个
[短剧合集] 2025年06月1日 精选+付费短剧推荐59部
[短剧] 2025年05月31日 精选+付费短剧推荐58部
[软件合集] 25年5月31日 精选软件66个
[电影] 黄沙漫天(2025) 4K.EDRMAX.杜比全景声 / 4K杜比视界/杜比全景声
[风口福利] 短视频红利新风口!炬焰创作者平台重磅激励来袭
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[美图] 2W美女个美女小姐姐,饱眼福
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag