[编程技术] Redis为什么这么快 - 秒杀面试官系列
作者:CC下载站 日期:2023-01-02 00:00:51 浏览:5 分类:编程开发
前言
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
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[课程] 爆款视频前三秒如何设计50招_短视频运营婧姐
[游戏娱乐] 《辐射4次世代版》v1.10.980中文版
[影视推荐] 果断收藏!全球恐怖新片,这15部最强
[小说] 《江南作品全集》
[绘画] 油画棒原创作品【绽放】图文教程来咯~
[资料] 非常多行业-工作总结word 共736份,个人部门述职范文,完整内容直接套用
[书籍] 双色球中奖分析与擒号秘技全图解(实用案例全新版)
[课程] 解锁AI未来:14门顶尖的平台付费AI课程全收录
[游戏娱乐] 《沙漠大冒险》v1.0.3中文版
[游戏娱乐] 《野卡橄榄球》v20240423原版英文
[资料] [大学期末救急课] 猴博士+高斯课堂+斐多课堂,全集视频合集
[云资源] 价值2万元的老男孩Python教程
[书库] 史上最全摄影书推荐(附700本PDF版打包下载)
[云资源] 花了一千多元买的私人健身教程
[下载工具] Internet Download Manager 6.42.7 (IDM)
[影视] 灌篮高手 WEB-DL版下载/Slam Dunk/スラムダンク/灌篮高手:THE FIRST/灌篮高手电影版 2022 The First Slam Dunk 61.35G
[即时通讯] 腾讯QQ PC版9.7.22.29315去广告绿色纯净版
[开发环境] PhpStorm2023中文激活版v2023.3.3 正式版
[资料] 3000 套电影电视剧 LOGO 宣传片常用音效合集包
[安卓软件] 酷我音乐APP_v10.7.6.4 去广告破解豪华VIP版
[云资源] 价值2万元的老男孩Python教程
[影视] 灌篮高手 WEB-DL版下载/Slam Dunk/スラムダンク/灌篮高手:THE FIRST/灌篮高手电影版 2022 The First Slam Dunk 61.35G
[云资源] 花了一千多元买的私人健身教程
[书库] 史上最全摄影书推荐(附700本PDF版打包下载)
[动画] 北斗神拳(1984) [两季合集] [MKV]
[资料] 抗战阵亡将士资料+续编
[电视剧] 三体 (2024) 全8集 网飞版本 中文字幕 合集
[影视] 三大队 WEB-DL版下载/Endless Journey/请转告局长,三大队任务完成了 2023 三大队 6.7G
[纪录片] 河西走廊【10集 国语 中文字幕 1080P 10.8G MP4】
[安卓软件] OfficeSuite中文版APP v14.2.50872.0破解版
- 最新评论
-
我想看看mw2ddyy 评论于:04-26 好东西阿zfy123123 评论于:04-18 谢谢楼主xiaoqi 评论于:04-12 勿在线解压,勿手机解压,请在电脑上用最新款压缩软件解压!推荐360压缩或者好压CC下载站 评论于:04-10 无法解压啊,客服能不能给个解压教程ravengrey 评论于:04-10 谢谢支持!!CC下载站 评论于:03-26 很棒的资源,感谢分享云体风身 评论于:03-26 感谢分享,好东西云体风身 评论于:03-26 谢谢支持!CC下载站 评论于:03-14 央视精品,感谢付出提供。qwer9009 评论于:03-14
- 热门tag