redis为什么这么快?

一)、纯内存操作

 数据存放在内存中,内存的响应时间大约是 100纳秒 ,这是Redis每秒万亿级别访问的重要基础。

二)、单线程操作,避免了频繁的上下文切换

虽然是采用单线程,但是单线程避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU;虽然作者认为CPU不是瓶颈,内存与网络带宽才是。但实际测试时并非如此,见上。

三)、采用了非阻塞I/O多路复用机制

多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。加上Redis自身的事件处理模型将epoll中的连接,读写,关闭都转换为了事件,不在I/O上浪费过多的时间。 

四)、纯ANSI C编写。

不依赖第三方类库,没有像memcached那样使用libevent,因为libevent迎合通用性而造成代码庞大,所以作者用libevent中两个文件修改实现了自己的epoll event loop。微软的兼容Windows补丁也因为同样原因被拒了。

快,原因之一是Redis多样的数据结构,每种结构只做自己爱做的事,当然比数据库只有Table,MongogoDB只有JSON一种结构快了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Redis快的原因 内存结构 单线程 IO多路复用 内存结构 Redis是KV结构的内存数据库,在内存上操作数据,...
    Haalo阅读 319评论 0 1
  • 这个时候只有你和我,这个地方只剩你和我,可亲近,很私密。总该说些什么吧,说过去,说将来,当然也可以说现在,我...
    冰夫阅读 80评论 0 0
  • 每日每夜,就像一个延长的梦,梦里梦到自己醒不来。 其实着眼现实,觉得活着少不了一场旅行,没有旅行的人生是不完整的,...
    静女其姝Y阅读 407评论 0 1
  • 今天心情不好,忙了好几周,手头的事情做的有点进度了。 没有想到,发生了一件让我不开心的事。 的确是心里一直忙着工作...
    白露秋月阅读 86评论 0 2
  • 工作这边,本来打算春招的,这一阵也不想着什么工作了,就想好好实习。那天,无聊刷着拉勾,看到同程有个运营,然后就投了...
    春分夏鱼阅读 277评论 2 1