Redis 为何这么快?

1. 纯内存操做,确定快

数据存储在内存中,读取的时候不须要进行磁盘的 IOredis

2. 单线程,无锁竞争损耗

单线程保证了系统没有线程的上下文切换segmentfault

使用单线程,能够避免没必要要的上下文切换和竞争条件,没有多进程或多线程引发的切换和 CPU 的消耗,没必要考虑各类锁的问题,没有锁释放或锁定操做,不会因死锁而下降性能;缓存

3. C 语言实现,更接近底层操做

Redis 是用 C 语言开发完成的网络

4. 多路 I/O 复用模型,非阻塞 IO

采用多路 I/O 复用技术可让单个线程高效的处理多个网络链接请求(尽可能减小网络 IO 的时间消耗)数据结构

非阻塞 IO 内部实现采用 epoll,采用了 epoll+本身实现的简单的事件框架。epoll 中的读、写、关闭、链接都转化成了事件,而后利用 epoll 的多路复用特性,毫不在 io 上浪费一点时间。多线程

5. 数据结构简单,底层又作了优化

数据结构简单,对数据操做也简单,Redis 中的数据结构是专门进行设计的;框架

6. 源码精湛、简短

扩展:

在 Redis 中,经常使用的 5 种数据结构和应用场景

  • String: 缓存、计数器、分布式锁等。
  • List: 链表、队列、微博关注人时间轴列表等。
  • Hash: 用户信息、Hash 表等。
  • Set: 去重、赞、踩、共同好友等。
  • Zset: 访问量排行榜、点击量排行榜等。

多路 I/O 复用模型

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

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

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

参考文章:

Redis 为何这么快?

一文揭秘单线程的 Redis 为何这么快?

Redis 数据类型及应用场景

视频 | IO 多路复用 select/poll/epoll 介绍

Redis 是单线程的,但 Redis 为何这么快?

我的公众号《骇客与画家》,欢迎关注

相关文章
相关标签/搜索