IT资讯
当前位置:还学网 > IT资讯 >  移动

为什么Redis是单线程,为什么这么快?

2022-01-20 10:29:36 木庄网络博客 编辑:奇奇 浏览数:25还学网

本文摘自PHP中文网,作者青灯夜游,侵删。近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问...

本文摘自PHP中文网,作者青灯夜游,侵删。

近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。

如果你在以前面试的时候还没有遇到过面试官问你《为什么说Redis是单线程的以及Redis为什么这么快!》,那么你看到这篇文章的时候,你应该觉得是一件很幸运的事情!如果你刚好是一位高逼格的面试官,你也可以拿这道题去面试对面“望穿秋水”般的小伙伴,测试一下他的掌握程度。

好啦!步入正题!我们先探讨一下Redis是什么,Redis为什么这么快、然后在探讨一下为什么Redis是单线程的?【相关推荐:Redis视频教程】

一.Redis简介

Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。

它支持多种类型的数据结构,如字符串(String),散列(Hash),列表(List),集合(Set),有序集合(Sorted Set或者是ZSet)与范围查询,Bitmaps,Hyperloglogs 和地理空间(Geospatial)索引半径查询。其中常见的数据结构类型有:String、List、Set、Hash、ZSet这5种。

Redis 内置了(Replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(Transactions) 和不同级别的磁盘持久化(Persistence),并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(High Availability)。

Redis也提供了持久化的选项,这些选项可以让用户将自己的数据保存到磁盘上面进行存储。根据实际情况,可以每隔一定时间将数据集导出到磁盘(快照),或者追加到命令日志中(AOF只追加文件),他会在执行写命令时,将被执行的写命令到硬盘里面。您也可以关闭持久化功能,将Redis作为一个高效的网络的缓存数据功能使用。

Redis不使用表,他的数据库不会预定义或者强制去要求用户对Redis存储的不同数据进行关联。

数据库的工作模式按存储方式可分为:硬盘数据库和内存数据库。Redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度极快。

(1)硬盘数据库的工作模式:

(2)内存数据库的工作模式:

看完上述的描述,对于一些常见的Redis相关的面试题,是否有所认识了,例如:什么是Redis、Redis常见的数据结构类型有哪些、Redis是如何进行持久化的等。

二.Redis到底有多快?

Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。

这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 Memcached 差!

横轴是连接数,纵轴是QPS。此时,这张图反映了一个数量级,希望大家在面试的时候可以正确的描述出来,不要问你的时候,你回答的数量级相差甚远!

三.Redis为什么这么快?

1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);

2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;

3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;

4、使用多路I/O复用模型,非阻塞IO;

5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;

以上几点都比较好理解,下边我们针对多路 I/O 复用模型进行简单的探讨:

(1)多路 I/O 复用模型

多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。

这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。

采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。

四.那么为什么Redis是单线程的?

分享到:

版权与免责声明:

凡未注明"稿件来源"的内容均为转载稿,本网转载出于传递更多信息的目的;如转载稿涉及版权问题,请作者联系我们,同时对于用户评论等信息,本网并不意味着赞同其观点或证实其内容的真实性;


本文地址://www.casaischia.com/news/2022/01/20/568280779.html

转载本站原创文章请注明来源:还学网

行业聚焦

宁德时代:公司 2025 年产能缺口不低于 430GWh,新增产能规模具有合理性

IT之家 1 月 17 日消息,今日早间,宁德时代回复深交所称,公司 2021 年 1-9 月的锂离子电池产能为 106.41GWh,公司已建成投产的锂离子电池...[详细]

Android 13 新功能曝光:锁屏界面直接扫描二维码,一键流转播放音频

IT之家 1 月 11 日消息,谷歌 Android 12 已经正式推出,Android 13 的开发就提上了日程。据 Android Police 报道,An...[详细]

联发科天玑 9000 方案新机爆料:有两三款采用 2K 屏,配大底主摄

IT之家 1 月 13 日消息,今日微博博主 @数码闲聊站 发布消息,表示 2022 年上半年即将发布的联发科天玑 9000 方案新机,将会有两三款都...[详细]

华硕推出 PL63 迷你主机:自带雷电 4 接口、双天线,形似路由器

感谢IT之家网友 肖战割割 的线索投递! IT之家 1 月 22 日消息,根据外媒 techpowerup 消息,华硕于 1 月 21 日...[详细]

这几款小工具可以让 Win11 更顺手,轻松帮你去掉系统槽点

对于一些在旧版 Windows 中的常用操作,在 Windows 11 中做了改动,这就让一些用惯旧版系统的用户觉得甚为不便,于是乎就出现了许多小小的修改小工具...[详细]

活动互动

更多

Win10 笔记本电脑升级 Win11 出现错误代码 0xC1900101 或 0x80070002,华硕发布解决方法

 

IT之家 1 月 17 日消息,近期,华硕官网发布了 Windows 10 笔记本电脑升级 Windows 11 错误的...[详细]

realme Book 增强版笔记本发布:搭载 i5

 

IT之家 1 月 4 日消息,今天,realme Book 增强版笔记本发布,搭载了英特尔 i5-11320H 处理器,...[详细]

微软收购动视暴雪,游戏圈“大地震”:索尼在日本股市跌近 10%,创 2020 年 3 月以来最大跌幅

 

IT之家 1 月 19 日消息,微软昨日晚间发布了一项重磅公告,以每股 95 美元的现金收购游戏开发和互动娱乐内容发行商...[详细]

消息称有赞正进行大裁员

 

近日,有媒体报道称,本月有赞启动了第一轮裁员。据多位接受裁员的消息人士证实,有赞确实把“人员优化”写入了2022年的OK...[详细]

宁德时代换电测试站被曝光,官方回应:与正式发布版有别

 

IT之家 1 月 16 日消息,宁德时代宣布将于 1 月 18 日 15:30 举办发布会,推出换电品牌 EVOGO。中...[详细]

一周排行每月关注