Redis为什么这么快?


声明:本文转载自https://my.oschina.net/u/3187740/blog/1787547,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

     接触Redis使用快一年多了,目前除了集群部署(非主从)还没有实际操作以外,对Redis的搭建,常规操作,基本原理,持久化方式等都比较熟悉;

     但是目前为止对于Redis为什么快,都只知道因为是内存操作,所以快,经过查阅资料,具体有以下原因,这里也针对几点详细探究下,以学习记录;

  1. 纯内存访问,内存响应大约100纳秒,这也就是Redis快的基础
  2. 非阻塞IO,Redis采用epoll作为多路复用技术的实现;
  3. 单线程避免多线程切换,竞态而产生的消耗

 

     为什么使用单线程?

     通过官方FAQ了解到CPU并不是Redis的瓶颈,最有瓶颈的可能是内存的大小或者网络;例如一般linux系统下每秒可以发送一百万个请求,所以如果应用程序主要使用O(N)或O(log(N))命令,很难使用到太多的CPU;不过也提到在4.0版本中,将会加入多线程,目前仅限于后台删除对象,及阻止通过Redis实施的命令;这里也说明了Redis快的基础;并不是不用,而是因为太快了,没必要用。。就是这么傲娇。。

 

 

     Redis单线程模型:

          Redis客户端对服务端的每次调用,都需经历发送命令、执行命令、返回命令三个过程,因为Redis是单线程来处理命令的,所以在执行阶段,每一条到达服务端的命令都不会执行,而是先进入队列,然后逐个执行;但是多个客户端发送的命令执行顺序是不确定的,但是确定不会有两条命令被同时执行,不会产生并发问题;

    

     非阻塞IO技术-epoll:

          查了一下有几个概念,阻塞、非阻塞忙轮询;   

         例如收快递,你不知道什么时候快递来,然后没别的事干,就去睡觉等快递主动打电话你了,这就是阻塞了;

         还有一种就是你主动每分钟给快递员打电话问到了没,这就是非阻塞忙轮询;

         忙轮询下如果快递员一直没到,则会消耗话费啊,时间等资源;

         这时候可以引进一个代理了,了解到的有三种:select,poll,epoll(详细原理需要自行百度);

         select,poll感觉就是监控,快递没来的时候,空闲的时候,就会让你睡觉,当来了的时候会把你弄醒;但是有一个缺点,如果你有好多个快递,那他不知道是哪个快递,只会告诉你快递来了,然后你又得挨个打电话轮询一遍,同样会造成不必要的浪费

          epoll则不会,他会告诉你是哪个快递到了,这样的话我们就可以直接打电话拿快递了。。

          这就是目前个人对epoll的通俗理解。。。

           因对网络这一块不是很熟悉,所以借鉴别人的理解写出,快递例子就是出于下面的博客;

           https://blog.csdn.net/shenya1314/article/details/73691088

           https://www.cnblogs.com/ajianbeyourself/p/5859989.html

              

     

本文发表于2018年03月30日 22:38
(c)注:本文转载自https://my.oschina.net/u/3187740/blog/1787547,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2670 讨论 0 喜欢 1

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

万稳万当,不如一默。任何一句话,你不说出来便是那句话的主人,你说了出来,便是那句话的奴隶。

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1