[编程技术] Redis为什么这么快 - 秒杀面试官系列
作者:CC下载站 日期:2023-01-02 00:00:51 浏览:22 分类:编程开发
前言
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
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[书籍] 【帛书版】合集
[老照片] 一万张珍贵历史老照片【jpg 40.4GB】
[素材] 2024新年春节烟花素材合集【PSD格式+PNG格式】
[美剧] 《生活大爆炸》S01-S12季合集 【1080P 蓝光原盘REMUX】 DTS-HD.MA.5.1 【外挂简英双语字幕】 742.8G
[电影] 茶馆(1982)蓝光原盘REMUX 内封简繁英.简中简繁四字幕【33.9G】本片根据老舍同名原著改编
[电视剧] 永夜星河(2024)【4K 2160P 杜比音效】国语中字【全32集完结】爱情,古装 又名 :黑莲花攻略手册
[影视合集] 《霍比特人》三部曲加长版合集 【4K 蓝光 HDR】 TrueHD.7.1 国语次世代+导评 【国配简繁英特效+导评中字五字幕】134G
[课程] 2024邓诚高三数学视频课【MP4 12.2GB】
[电视剧] 宿敌(2024)【完结】【4K / 臻彩视听 / 杜比音效】【廖凡/朱珠】【17.8G】
[影视合集] 【鹿鼎记 7个版本合集】【1984-2020】【4K、1080P、720P】【中文字幕】【278.5G】
[书籍] 彭子益医书合集 [PDF/DOC]
[动画] 2002《火影忍者》720集全【4K典藏版】+11部剧场版+OVA+漫画 内嵌简日字幕
[剧集] 《斯巴达克斯》1-4季合集 无删减版 1080P 内嵌简英特效字幕
[电影] 《变形金刚系列》七部合集 [4K HDR 蓝光] 国英双语音轨 [内封精品特效字幕]【典藏版】235G
[动画] 收藏版:1996-2024年名侦探柯南全系列1080P,含国配、日配双语版+26部剧场作品
[CG剧情] 《黑神话:悟空》158分钟CG完整剧情合集 4K120帧最高画质
[纪录片] B站食贫道收费纪录片 *迷失东京* [1080P] 揭露日本大家感兴趣却不为人知的秘密
[电影] 《神奇动物在哪里三部合集》 4K REMUX原盘 [杜比视界] [国英双语音轨] 特效字幕 [171.1G]
[游戏] 黑神话悟空离线完整版+修改器
[电影] 我的阿勒泰 (2024) 4K内封简繁 全8集 9.57G
[电影] 《黄飞鸿》全系列合集
[Android] 开罗游戏 ▎像素风格的模拟经营的游戏厂商安卓游戏大合集
[游戏合集] 要战便战 v0.9.107 免安装绿色中文版
[电影] 【珍藏版】20世纪电影合集从1922年到1990年代,看看爷爷辈的电影是什么样合集约212G
[书籍] 彭子益医书合集 [PDF/DOC]
[系统]【黑果小兵】macOS Big Sur 11.0.1 20B50 正式版 with Clover 5126 黑苹果系统镜像下载
[美图] 【经典收藏美图集合】1500多张韩国美女高清图片让你的收藏夹更加丰富多彩
[瓜] 青岛【路虎女】插队、逆行、追尾、打人未删减【完整版视频】
[电视剧] 灵魂摆渡(1-3季合集)【未删减】【4K.无水印】【剧情/恐怖/惊悚】【豆瓣8.7】
[书籍资料] 《玉房秘诀》《玉房秘典》《古代房中术》
- 最新评论
-
电影很不错谢谢分享贪睡的猫 评论于:11-18 一部不错的经典科幻kelvin 评论于:11-13 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢285552528 评论于:11-09 找了好久的资源bjzchzch12 评论于:11-07 谢谢分享感谢ppy2016 评论于:11-05 谢谢分享感谢ppy2016 评论于:11-05 有靳东!嘻嘻奥古斯都.凯撒 评论于:10-28 流星花园是F4处女作也是4人集体搭配的唯一一部!奥古斯都.凯撒 评论于:10-28 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢AAAAA 评论于:10-26 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢password63 评论于:10-26
- 热门tag