千家信息网

Redis 为什么使用单进程单线程方式也这么快

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言编写。官方提供的数据是可以达到100000+的 qps。这个数据不比采用单进程多线程的同样基于内存的 KV 数据库
千家信息网最后更新 2026年10月31日Redis 为什么使用单进程单线程方式也这么快

Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言编写。官方提供的数据是可以达到100000+的 qps。这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 Memcached 差。

Redis 快的主要原因有:

  1. 完全基于内存;

  2. 数据结构简单,对数据操作也简单;

  3. 使用多路 I/O 复用模型;

第一、二点不细讲,主要围绕第三点采用多路 I/O 复用技术来展开。

多路 I/O 复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。这里"多路"指的是多个网络连接,"复用"指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快(内存内的操作不会成为这里的性能瓶颈),主要以上两点造就了 Redis 具有很高的吞吐量。

和 Memcached 不同,Redis 并没有直接使用 Libevent,而是自己完成了一个非常轻量级的对 select、epoll、evport、kqueue 这些通用的接口的实现。在不同的系统调用选用适合的接口,linux 下默认是 epoll。因为 Libevent 比较重,更通用,代码量也就很庞大,拥有很多 Redis 用不上的功能,Redis 为了追求"轻巧"并且去除依赖,就选择自己去封装了一套。

单进程单线程好处

  1. 代码更清晰,处理逻辑更简单

  2. 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗

  3. 不存在多进程或者多线程导致的切换而消耗 CPU

单进程单线程弊端

  1. 无法发挥多核 CPU 性能,不过可以通过在单机开多个 Redis 实例来完善;

其他一些优秀的开源软件采用的模型

  • 多进程单线程模型:Nginx

  • 单进程多线程模型:Memcached


线程 进程 数据 模型 复用 内存 多个 多路 事件 性能 处理 消耗 不同 代码 技术 接口 数据库 网络 阻塞 优秀 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云南咖啡 中国互联网科技工作委员会毛军 成都互联网科技公司 苏州互联网科技贷款公司 猫创互联网科技 互联网科技网站 互联网公司会议桌创意科技软装饰 蓝色互联网科技 开启互联网科技时代小说 互联网系的金融科技公司 金融科技与互联网金融相同和不同 群盈汇互联网科技有限公司 无锡工业互联网科技有限公司 智帮互联网科技公司最近动向 雨阳互联网卡科技有限公司 工业互联网科技成果转化 扫呗互联网科技有限公司 普陀区互联网教育科技管理办法 深圳互联网科技园地址 互联网科技大佬云集 广州为想互联网科技有限公司 厦门中拓互联网络科技有限公司 奇士达互联网科技 本届互联网博览会上的黑科技 互联网科技的全部知识 科技互联网的核心竞争力 城市宝互联网科技有限公司 万物互联网智能科技 湖北辰鑫科技互联网 互联网科技创新方面的资料
0