Redis单线程

redis · 浏览次数 : 0

小编点评

Redis是基于Reactor模式开发的网络事件处理器,这个处理器是单线程的,所以redis是单线程的。

由于Redis是纯内存操作,相比于磁盘来说,内存就快得多,这是Redis快的主要原因。

Redis采用的是多路复用非阻塞IO机制(NIO),即NIO。这允许Redis同时处理多个网络连接和I/O流,提高了吞吐量。

非阻塞I/O使得Redis能够高效地处理大量的客户端连接和数据读写操作,而不会因为过多的I/O操作导致性能下降或线程阻塞。

单线程避免上下文切换单线程反而没有了多线程上下文切换带来的损耗,已经资源竞争带来的复杂性。

简单的数据结构Redis的数据结构相对简单,这使得数据在内存中的访问更加连续和一致,有利于充分利用CPU缓存,减少缓存失效的开销。

最后,值得注意的是Redis6.0引入了多线程。在Redis6.0之前,Redis>Redis6.0引入了多线程。在Redis6.0之前,Redis Server端处理接受到客户端请求时,从Socket连接建立到指令的读取、解析、执行、写回都是由一个线程来处理。

正文

Redis是基于Reactor模式开发的网络事件处理器,这个处理器是单线程的,所

以redis是单线程的。


为什么它是单线程还那么快呢?

主要有以下几个原因:


一、纯内存操作

由于Redis是纯内存操作,相比于磁盘来说,内存就快得多,这个是Redis快的主要

原因。


二、多路复用I/O机制(NIO)


Redis采用的是多路复用非阻塞IO机制,即NIO。这允许Redis同时处理多个网络

连接和I/O流,提高了吞吐量。非阻塞I/O使得Redis能够高效地处理大量的客户端

连接和数据读写操作,而不会因为过多的I/O操作导致性能下降或线程阻塞。


三、单线程避免上下文切换


单线程反而没有了多线程上下文切换带来的损耗,已经资源竞争带来的复杂性。上

下文切换会消耗CPU资源并降低性能,而竞争条件可能导致数据不一致和性能下降


四、简单的数据结构


Redis的数据结构相对简单,这使得数据在内存中的访问更加连续和一致,有利于

充分利用CPU缓存,减少缓存失效的开销。


最后,值得注意的是Redis6.0引入了多线程。在Redis6.0之前,Redis>Redis6.0引入了多线程。在Redis6.0之前,Redis Server端处

理接受到客户端请求时,从Socket连接建立到指令的读取、解析、执行、写回都

是由一个线程来处理。这种方式在客户端请求比较多的情况下,单个线程的网络处

理效率较慢,导致客户端的请求处理效率较低。

Redis其实主要分成两个模块:网络IO处理模块命令执行模块。引入多线程是为

了解决网络I/O模块效率问题,利用多核CPU的优势,提升网络I/O处理性能。而

命令执行模块还是使用单线程,从而继续保证了命令执行的原子性。

与Redis单线程相似的内容:

Redis单线程

Redis是基于Reactor模式开发的网络事件处理器,这个处理器是单线程的,所 以redis是单线程的。 为什么它是单线程还那么快呢? 主要有以下几个原因: 一、纯内存操作 由于Redis是纯内存操作,相比于磁盘来说,内存就快得多,这个是Redis快的主要 原因。 二、多路复用I/O机制(NIO)

(三)Redis 线程与IO模型

1、Redis 单线程 通常说 Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,其他功能,比如持久化、异步删除、集群数据同步等,是由额外的线程执行的,所以严格来说,Redis 并不是单线程。 多线程开发会不可避免的带来并发控制和资源开销的问题,如果没有良好

redis7源码分析:redis 单线程模型解析,一条get命令执行流程

有了下文的梳理后 redis 启动流程 再来解析redis 在单线程模式下解析并处理客户端发来的命令 1. 当 client fd 可读时,会回调readQueryFromClient函数 void readQueryFromClient(connection *conn) { client *c

redis性能测试

环境 redis 7.2.5 主频 核心数 内存 2.5GHz 32 64GB 测试结论 当前场景下redis单线程、多线程表现差异不大 使用pipeline模式可以显著提高基准性能 非pipilie下redis性能再12~13w左右 pipiline下redis性能在35w左右 测试记录 单线程r

时间片 线程切换 指令周期 流水线 TPS的初步了解

时间片 线程切换 指令周期 流水线 TPS的初步了解 情况说明 Redis 单线程提供服务, 可以支撑十万级别的TPS 通过以个非常简单的测试 redis-benchmark -c 50 -n 50000 ping Intel 8369HB 3.3Ghz 14万TPS 阿里 倚天710 2.7Ghz

单线程 Redis 如此快的 4 个原因

本文翻译自国外论坛 medium,原文地址:https://levelup.gitconnected.com/4-reasons-why-single-threaded-redis-is-so-fast-414e0106f921 作为内存数据存储,Redis 以其速度和性能而闻名,通常被用作大多数后

[转帖]高性能IO模型:为什么单线程Redis能那么快?

https://zhuanlan.zhihu.com/p/596170085 你好,我是蒋德钧。 今天,我们来探讨一个很多人都很关心的问题:“为什么单线程的Redis能那么快?” 首先,我要和你厘清一个事实,我们通常说,Redis是单线程,主要是指Redis的网络IO和键值对读写是由一个线程来完成的

[转帖]Redis学习六(Redis 阻塞的原因及其排查方向).

https://www.cnblogs.com/jmcui/p/13926397.html 一、慢查询 因为 Redis 是单线程的,大量的慢查询可能会导致 redis-server 阻塞,可以通过 slowlog get n 获取慢日志,查看详情情况。 回到顶部 二、bigkey 大对象 bigk

[转帖]Redis Scan 原理解析与踩坑

https://www.cnblogs.com/jelly12345/p/16424080.html 1. 概述由于 Redis 是单线程在处理用户的命令,而 Keys 命令会一次性遍历所有 Key,于是在 命令执行过程中,无法执行其他命令。这就导致如果 Redis 中的 key 比较多,那么 Ke

[转帖]redis惰性删除 lazy free 源码剖析,干货满满

目录 前言 数据删除场景 lazy free 概念 配置 源码剖析(版本 6.2.6) 场景一:客户端执行的显示删除/清除命令 场景二:某些指令带有的隐式删除命令 场景三:删除过期数据 场景四:内存淘汰数据删除 场景五:主从同步清空从库 小结 前言 都说 redis 是单线程的,其实并不是说 red