加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

四个步骤让你彻底明白Redis到底快在哪里

发布时间:2019-07-26 22:28:47 所属栏目:编程 来源:佚名
导读:媒介 Redis是一种基于键值对(Key-Value)的NoSQL数据库,Redis的Value可以由String,hash,list,set,zset,Bitmaps,HyperLogLog等多种数据布局和算法构成。Redis还提供了键逾期,宣布订阅,事宜,Lua剧本,哨兵,Cluster等成果。Redis执行呼吁的速率很是

媒介

Redis是一种基于键值对(Key-Value)的NoSQL数据库,Redis的Value可以由String,hash,list,set,zset,Bitmaps,HyperLogLog等多种数据布局和算法构成。Redis还提供了键逾期,宣布订阅,事宜,Lua剧本,哨兵,Cluster等成果。Redis执行呼吁的速率很是快,按照官方给的机能可以到达10w+qps。那么本文首要先容到底Redis快在那边,首要有以下几点:

一.开拓说话

此刻我们都用高级说话来编程,好比Java、python等。大概你会认为C说话很迂腐,可是它真的很有效,事实unix体系就是用C实现的,以是C说话长短常贴近操纵体系的说话。Redis就是用C说话开拓的,以是执行会较量快。

其它多说一句,大门生们好勤学C,会让你更好的领略计较机操纵体系。别认为学了高级说话就可以不消存眷底层,欠的债总归要还的。此处保举一本较量难啃的书《深入领略计较体系》。

二.纯内存会见

Redis将全部数据放在内存中,非数据同步正常事变中,是不必要从磁盘读取数据的,0次IO。内存相应时刻约莫为100纳秒,这是Redis速率快的重要基本。先看看CPU的速率:

四个步调让你彻底大白Redis到底快在那边

拿我的电脑来说,主频是3.1G,也就是说每秒可以执行3.1*10^9个指令。以是说CPU看天下长短常很是慢的,内存比它慢百倍,磁盘比他慢百万倍,你说快不快?

借了一张《深入领略计较机体系》的图,展示了一个典范的存储器条理布局,在L0层,CPU可以在一个时钟周期会见到,基于SRAM的高速缓存春续期,可以在几个CPU时钟周期会见到,然后是基于DRAM的主存,可以在几十到几百个时钟周期会见到他们。

四个步调让你彻底大白Redis到底快在那边

三.单线程

第一,单线程简化算法的实现,并发的数据布局实现不单坚苦且测试也贫困。第二,单线程停止了线程切换以及加锁开释锁带来的耗损,对付处事端开拓来说,锁和线程切换凡是是机能杀手。虽然了,单线程也会有它的弱点,也是Redis的恶梦:阻塞。假如执行一个呼吁过长,那么会造成其他呼吁的阻塞,对付Redis黑白常致命的,以是Redis是面向快速执行场景的数据库。

除了Redis之外,Node.js也是单线程,Nginx也是单线程,但他们都是处事器高机能的规范。

四.非阻塞多路I/O复用机制

在这之前先要说一下传统的阻塞I/O是怎样事变的:当行使read可能write对某一文件描写符(File Descriptor FD)举办读写的时辰,假如数据没有收到,那么该线程会被挂起,直到收到数据。阻塞模子固然易于领略,可是在必要处理赏罚多个客户端使命的时辰,不会行使阻塞模子。

四个步调让你彻底大白Redis到底快在那边

I/O多路复用现实上是指多个毗连的打点可以在统一历程。多路是指收集毗连,复用只是统一个线程。在收集处事中,I/O多路复用起的浸染是一次性把多个毗连的变乱关照营业代码处理赏罚,处理赏罚的方法由营业代码来抉择。在I/O多路复用模子中,最重要的函数挪用就是I/O 多路复用函数,该要领能同时监控多个文件描写符(fd)的读写环境,当个中的某些fd可读/写时,该要领就会返回可读/写的fd个数。

四个步调让你彻底大白Redis到底快在那边

Redis行使epoll作为I/O多路复用技能的实现,再加上Redis自身的变乱处理赏罚模子将epoll的read、write、close等都转换成变乱,不在收集I/O上挥霍过多的时刻。实现对多个FD读写的监控,进步机能。

四个步调让你彻底大白Redis到底快在那边

举个形象的例子吧。好比一个tcp处事器处理赏罚20个客户端socket。A方案:次序处理赏罚,假如第一个socket由于网卡读数据处理赏罚慢了,一阻塞后头都玩蛋去。B方案:每个socket哀求都建设一个两全子历程来处理赏罚,不说每个历程耗损大量体系资源,光是历程切换就够操纵体系累的了。C方案(I/O复用模子,epoll):将用户socket对应的fd注册进epoll(现实上处事器和操纵体系之间转达的不是socket的fd而是fd_set的数据布局),然后epoll只汇报哪些必要读/写的socket,只必要处理赏罚那些活泼的、有变革的socket fd的就好了。这样,整个进程只在挪用epoll的时辰才会阻塞,收发客户动静是不会阻塞的。

【编辑保举】

  1. MariaDB:真正的及时同步数据库,MySQL要警惕了
  2. 怎样选择高机能NoSQL数据库
  3. 挑衅 Oracle 的环球首个 AI 原生数据库 GaussDB,华为将开源
  4. Linux下怎样实现MySQL数据库天天按时自动备份
  5. 一文学会MySQL数据库机能优化:建设表、计划表、SQL优化
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读