Redis真的是单线程的吗?

Redis提及它的优势点就是它的速度非常快。当我们提及Redis是否是单线程的时候我们可能会回答它的设计就是单线程访问内存存储的数据所以很快。但是你有没有考虑过为什么它的架构使用单线程?为什么隔壁的MySQL虽然访问的不是内存但是使用的还是多线程呢?以及Redis真的就是单线程的吗?

我们在说到这个问题的时候就要分清Redis6.0之前和之后的版本来讨论了。

Reids6.0之前版本:

Redis 6.0之前在I/O层面的传输采用的是Redis服务器单线程获取,业务服务器使用Socket池将业务数据并行的传输给Redis的缓冲区中,然后Redis单线程使用epll_wait()来获取数据。

"接收数据 → 解析命令 → 执行命令 → 发送响应"整个流程 全部由同一个主线程串行完成

任何一个步骤耗时过长(如 KEYS、SORT 等慢命令)都会阻塞后续所有请求

Redis6.0之后版本:

其实在Redis4.x版本已经在负责处理客户端请求的线程单线程,但是开始加了一些多线程的内容比如异步删除;在Reids6.x中全面支持了多线程。但是这个多线程也是在网络I/O中接受数据使用多线程,在命令执行中还是单线程的进行。

为什么就算是到了6.x版本仍然是单线程进行命令的处理呢?

如果想要使用多线程带来的遍历就得设计一个完美的多线程的架构方案,单线程的优势是不用考虑多线程带来的线程不安全的问题,并且redis直接操作内存已经很快了并且还有高效的数据结构,比如跳表,哈希进行查询。所以它的性能瓶颈可能只是在网络传输中比较慢。

相关推荐
m0_7369270433 分钟前
想抓PostgreSQL里的慢SQL?pg_stat_statements基础黑匣子和pg_stat_monitor时间窗,谁能帮你更准揪出性能小偷?
java·数据库·sql·postgresql
在云上(oncloudai)33 分钟前
Amazon ElastiCache 全解析:打造高性能的智能缓存架构
缓存·架构
lang2015092834 分钟前
MySQL 8.0.29 及以上版本中 SSL/TLS 会话复用(Session Reuse)
数据库·mysql
Jabes.yang35 分钟前
Java面试大作战:从缓存技术到音视频场景的探讨
java·spring boot·redis·缓存·kafka·spring security·oauth2
望获linux1 小时前
【实时Linux实战系列】使用 u-trace 或 a-trace 进行用户态应用剖析
java·linux·前端·网络·数据库·elasticsearch·操作系统
清和与九2 小时前
binLog、redoLog和undoLog的区别
数据库·oracle
望获linux2 小时前
【实时Linux实战系列】FPGA 与实时 Linux 的协同设计
大数据·linux·服务器·网络·数据库·fpga开发·操作系统
总有刁民想爱朕ha2 小时前
Python自动化从入门到实战(24)如何高效的备份mysql数据库,数据备份datadir目录直接复制可行吗?一篇给小白的完全指南
数据库·python·自动化·mysql数据库备份
朝九晚五ฺ2 小时前
【Redis学习】持久化机制(RDB/AOF)
数据库·redis·学习
虾说羊2 小时前
sql中连接方式
数据库·sql