| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> redis 为什么这么快,你真的知道吗? -> 正文阅读 |
|
[大数据]redis 为什么这么快,你真的知道吗? |
前言相信大家在面试过程中,都被面试官问到过这样一个问题,缓存中间件大名鼎鼎的 redis 速度为什么这么快呢? 针对于面试过程中的痛点问题,笔者昨晚熬夜收集资料,并且通过走访大量使用者,整理出如下的结论。我敢保证,你看了这篇文章,再问你这个问题,保准把面试官虐哭。 分析原因这里就不卖关子了,先说结论,我们再对原因进行抽丝剥茧。 redis快的原因
纯内存操作(最主要条件)首先最主要的原因一定是: 众所周知,内存的访问速度是远远大于硬盘访问速度的。我们来做个对比,拿数据库(硬盘)和 redis (内存)对比,一个操作对应磁盘,一个操作对应内存。他们两个的的访问速度差了一个数量级。 可能大家对数量级没有什么该概念。那可是整整 1000 倍啊!现在大家知道了吧。
这位同学一看就是对 redis 理解的不够透彻,redis 持久化线程和操作内存数据的线程,并不是一个线程,我们这里说的 redis 快,只是针对操作内存的线程来说的,操作很快。因为操作是直接客户端响应时间息息相关的。 合适的线程模型🥈单线程误区
首先单线程 你要知道多线程的出现,本身就是为了解决多核心 CPU 利用率不足。如果单线程是快的原因的话,那么我们还要多线程干什么,小伙伴你说是吧!
因为没有必要,我们先来想一下多线程适用场景有哪些?
多线程的出现以及适用场景目的就是为了提升单线程在 cpu利用率和io利用率之间的不足
我们从上面的计算机操作分类来说
但是~想要提高网络 IO 的利用率,不是只有多线程一条路。
所以说千万不要陷入 我这里总结一下我的看法,
主要是因为我们对 Redis 有着更高的要求。 据测算,
为了提升 QPS,很多公司的做法是部署 而经过分析,限制 下图是
🥈单线程模式下快的原因说完了对于单线程的误区,下面我们就要说一下在单线程模式下, 用四个字就可以来形容这个原因,那就是
简单理解就是 单个线程同时检测若干个网络连接(Socket)是否可以执行IO操作的能力,就是将多个进程的网络 IO Socket注册到同一个管道上。 用最少的资源,干最多的事情。 比较传统的方式是使用多线程模型,每来一个客户端连接,就分配一个线程,然后后续的读写都在对应的进程/线程,这种方式处理 100 个客户端没问题,但是当客户端增大到 10000 个时,10000 个进程/线程的调度、上下文切换以及它们占用的内存,都会成为瓶颈。 为了解决上面这个问题,就出现了 I/O 的多路复用,可以只在一个进程里处理多个文件的 I/O
但是出现的个数不可能有很多,这样我们用一个线程来监听这些消息,然后分派去给操作线程执行就可以。
优秀的数据结构redis 在存储数据结构的设计上还是花了一番心思的 不然这也不会成为它快的一点原因。 redis的五种数据类型主要有:
举个例子,我们都知道redis底层使用c语言写的,但是 String 实现并不是简单的用c语言的字符串实现的,而是采用一个
数据结构的详细解析,我们在这里就不多赘述了,我们放到我们的下一篇。 合理的数据编码方式
我们还是以 redis 中的 string 结构举例子,redis为了存储不同大小的字符串,精心设计了 5 种类型。
结论: 通过这种能够灵活存储不同大小的字符串,有效的节省了内存。字符串大的时候分配大的内存空间,小的时候就分配小的,高效利用内存。 当然,在这里只是举个例子,想了解更多redis 底层细节的小伙伴,我们放到了后续的系列。 总结至此,我们知道了这个 redis 经典面试题的答案了。
不知道大家学会了吗? 学会的小伙伴们,再也不怕那些刁钻的面试官了,我敢保证,你看了这篇文章,再问你这个问题,保准把面试官虐哭。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:47:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |