Redis(三)单线程架构介绍

前文已经介绍了,Redis 是使用单线程架构来实现高性能的数据库服务;但实际上 Redis 虽然只使用一个线程来处理所有命令请求,但Redis 服务器内部并不是只有一个线程;处理命令的所有请求的那个线程,称作核心主线程,还有另外多个线程用来处理网络 IO 服务。
宏观上,客户端"并发"向 Redis 服务端发送请求

多个请求到达服务器,由于处理请求是单线程的,所以这多个请求会根据到来先后顺序在 Redis 提供的等待队列上排队,由核心主线程一个个取出进行处理。
微观上,Redis 服务器实际上是串行执行这些命令的,也不存在线程安全问题

重要问题:Redis 是单线程的,为什么和其它关系型数据库相比,还能这么快?

1、Redis 是纯内存访问的。

Redis 把所有的数据都存放在内存中,而内存的响应时长很快(约为100 ns),这也是 Redis 可以达到每秒万级别访问的重要基础。

2、Redis 使用 epoll 进行 IO 多路复用,不会在网络 IO 上浪费过多时间

Redis 把 epoll 中的各种操作都转换为事件

基于 epoll 的 IO 多路复用,可以让一个线程管理多个套接字上的事件,通过 epoll 本身的回调和事件通知机制,让线程处理命令,属于非阻塞式 IO,节约了时间。

3、 单线程处理命令机制避免了线程切换、竞态导致的额外消耗

Redis 的所有命令请求都是在服务端的核心主线程上进行处理的,既简化了算法与数据结构的实现,又避免了多线程竞争同一份资源以及多线程切换的消耗。

(Redis 的每个基本操作都是短平快的,就是简单操作一下内存,不是很吃 CPU,多线程用处也不大)

4、Redis 的核心功能相比于其它关系型数据库更简单,任务更少

其它关系型数据库,对于数据的增删查改都有更为复杂的功能支持*(比如数据库的各种索引、约束)*,这样势必会导致更多的开销。

相关推荐
蓝速科技10 分钟前
政务自助终端信创选型与无人值守落地方案
android·大数据·数据库·人工智能·科技·技术分享·政务
粤鼎恒业26 分钟前
惠州工厂电子料回收厂家推荐:从交接单反推筛选标准
大数据·数据库·算法·硬件架构·硬件工程·pcb工艺·材料工程
ShineWinsu36 分钟前
对于Redis:Redis的认识以及分布式系统的解析
linux·数据库·c++·redis·缓存·消息队列·分布式架构
SelectDB1 小时前
ELK 做不了的分析,我用 Doris 物化视图补上了:配置、开关与四个排错现场
大数据·数据库·数据分析
SelectDB1 小时前
Agent 日志检索慢、存储还贵?search() + VARIANT 的落地命令和几个当场踩出来的问题
大数据·数据库·数据分析
SelectDB1 小时前
ClickHouse 存日志踩过的并发坑:压测脚本、检索写法与排错命令
大数据·数据库·数据分析
龙腾AI白云1 小时前
AI微调技术:让通用大模型精准适配垂直行业
数据库·人工智能·机器学习·flask·scikit-learn
SelectDB1 小时前
NESTED 怎么搜 VARIANT 里的嵌套数组:一份可直接复制的统一引擎实战笔记
大数据·数据库·数据分析
hasty1 小时前
返回一个文件,为何越过整个目录?Khoj 静态资源路由的安全边界
数据库·安全
程序员-Benothing1 小时前
Linux内核与模块管理:uname、lsmod、modprobe、sysct
linux·运维·数据库