redis单线程模式

article/2025/9/29 19:05:32

1、redis单线程指的是:Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。
**2、多线程开销:**共享资源的并发访问控制问题会导致额外得开销
在这里插入图片描述

为何系统吞吐率没有根据线程增加而增加:只是简单地采用一个粗粒度互斥锁,就会出现不理想的结果:即使增加了线程,大部分线程也在等待获取访问共享资源的互斥锁,并行变串行,系统吞吐率并没有随着线程的增加而增加。
3、单线程redis为何很快:
3.1 redis大部分操作在内存中完成,且采用了高效得数据结构(例如哈希表,跳表)
3.2 redis采用了多路复用机制,能够在网络IO中操作大量得客户端请求,并实现高吞吐率。
4、redisIO模型以及阻塞点:
在这里插入图片描述

上图显示了redis中IO得模型,bind/listen:监听客户端请求;accept:和客户端建立链接;recv:从socket中读取请求;parse:解析客户端发送得请求;get:根据请求类型读取键值数据;send:向socket中写回数据。其中:accept和recv操作会阻塞redis线程,redis采用了socket的非阻塞模式解决该问题。具体使用流程如下:
4.1、socket模型非阻塞模型
在这里插入图片描述
如上图所示,socket模型调用socket()方法,会返回主动套接字,然后调用listen(),会将主动套接字转换为监听套接字,然后监听客户端的链接请求,最后调用accept()方法接收到达的客户端链接,并返回已连接套接字。针对监听套接字,可以设置非阻塞模式,当redis调用accept()但一直没有链接请求到达时,可以返回处理其他操作,监听套接字继续监听请求。同样的,可以针对已连接套接字设置非阻塞模式,调用recv()后,如果一直没有数据到达,可以返回处理其他操作,并继续监听该已连接套接字,并在有数据时继续操作。
4.2、多路复用高性能I/O模型
在这里插入图片描述

如上图所示,redis IO模型的多路复用机制。linux中的IO多路复用机制是指一个线程处理多个IO流(常用select/epoll机制)。就是该机制允许内核中同时存在多个监听套接字和已连接套接字。上图中的FD就是所说的多个套接字。内核监听这些套接字,每当监测到FD上有请求到达,就会触发相应的事件。将事件放入一个队列中,redis单线程就对事件队列不断进行处理,调用相应的处理函数。
5、redis单线程处理IO请求性能瓶颈:
5.1、任意一个请求在server中一旦发生耗时,都会影响整个server的性能,也就是说后面的请求都要等前面这个耗时请求处理完成,自己才能被处理到。耗时的操作包括以下几种:(业务人员尽量规避)
a、操作bigkey:写入一个bigkey分配内存会消耗更多时间;redis4.0推出了lazy-free机制,把bigkey释放内存放到异步线程中执行,降低了主线程的影响;
b、使用复杂度过高的命令:例如SORT/SUNION/ZUNIONSTORE,或者O(N)命令,但是N很大,例如lrange key 0 -1一次查询全量数据;
c、大量key集中过期:reids的过期机制也是在主线程中执行的,大量key过期会耗时较长;
d、淘汰策略:当内存超过内存上线后会在写入时触发淘汰策略,造成耗时变长;
e、主从全量同步RDB:fork瞬间会阻塞整个线程,实例内存占用越多,阻塞越久;
f、AOF刷盘开始always机制:每次写操作都会写盘,会导致redis性能变慢;
5.2、并发量非常大时,单线程读写客户端IO数据存在性能瓶颈,虽然采用IO多路复用机制,但是读写客户端数据依旧是同步IO,只能单线程依次读取客户端的数据,无法利用到CPU多核:redis6.0实现了多线程,但也只是在操作客户端读写的时候并行,命令的真正操作依旧时单线程的。但也可以进一步提升server性能。
6、select、poll、epoll之间区别:https://www.cnblogs.com/aspirant/p/9166944.html

学习路径:极客时间-Redis 核心技术与实战


http://chatgpt.dhexx.cn/article/w1RFqorY.shtml

相关文章

redis单线程

redis多线程6.0 redis单线程为什么快 单线程vs多线程 redis单线程指的是收到的读写命令是放到队列里,一条条执行的; redis用的io多路复用技术,所以可以一次性接收多个客户端请求,然后放到队列中; 先跟服务端建立连接…

Redis单线程和多线程

Redis单线程 Reids是单线程! Reids是单线程! Reids是单线程! Redis架构模型:Redis 基于 Reactor 模式来设计开发了自己的一套高效的事件处理模型 ,即文件事件处理器 文件事件处理器(file event handler) 主要是包含 4 个部分&…

Redis单线程模型详解

这里写目录标题 Redis 单线程模型简介文件事件常用的文件事件处理器客户端与Redis通信的一次流程 Redis为什么采用单线程模型Redis 为什么要引入多线程呢?为什么Redis单线程模型也能效率这么高? Redis 单线程模型简介 Redis 内部使用文件事件处理器 fil…

一文搞懂,redis单线程执行全貌(深入拆解分析)

文章目录 前言一、基础知识1.Reactor 单线程模型:2.文件描述符:3.套接字:4.服务端连接建立: 二、大话单线程模型1.建立连接:2.IO轮训及就绪事件处理3.命令处理及响应 三、总结 前言 本文参考源码版本为 redis6.2 redis…

高并发架构系列:Redis为什么是单线程、及高并发快的3大原因详解

Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快; 2.redis是单线程的,省去了很多上下文切换线程的时间; 3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采…

Redis —单线程

单线程概念 Redis是单线程的原因: Redis 单线程指的是「接收客户端请求->解析请求 ->进行数据读写等操作->发送数据给客户端」这个过程是由一个线程(主线程)来完成的 但是,Redis 程序并不是单线程的,Redis…

redis是单线程还是多线程?

1、Redis单线程 在一开始的时候,Redis采用的是单线程模型,因为Redis是一个基于内存的数据库,将所有的数据放入内存,所以使用单线程的操作效率是最高的,多线程会上下文切换消耗大量时间,对于内存系统来说&a…

redis单线程理解

redis 单线程的理解 单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都…

MooseFS

MFS简介 MooseFS是一个具有容错性的网络分布式文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本;对于访问的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样 官…

mosh ES

Operator arithmetic operators: baiscly like python but include and -- like the ones in c. "" shortcut like this is also applicable. comparision operator: >,>,..... use as strict equality operator.会同时比较类型和值 ”“只比较值&#x…

MOSS安装

1、conda安装 a、安装虚环境 conda create -n moss python3.7 b、激活base环境base source ./bin/activate c、激活自己环境 conda activate moss conda deactivate # 退出环境,进入base环境 2、jittor安装 a、去官网查看安装cuda,cento步骤如下…

(最通俗易懂的)目标跟踪MOSSE、KCF

引言 我们在研究目标跟踪前先要了解它分为哪几类,以及大体思路是什么? 分类:①目标建模;②前景背景识别。 思路:①目标建模的思路是首先我们用一些手段把我们想要跟踪的目标“框出来”。例如:我们要跟踪视…

相关滤波之开篇Mosse原理及代码详解

相关滤波之开篇Mosse原理及代码详解 相关滤波(Correlation Filter )介绍代码解读程序框图 本文主要介绍相关滤波算法开篇——mosse具体原理及其python代码实现流程 相关滤波(Correlation Filter )介绍 相关滤波(CF&a…

目标跟踪 MOSSE(Visual Object Tracking using Adaptive Correlation Filters)

文章标题:《Visual Object Tracking using Adaptive Correlation Filters》 文章地址:http://citeseerx.ist.psu.edu/viewdoc/download?doi10.1.1.294.4992&reprep1&typepdf 文章代码:(python)https://github…

MOSSE相关滤波跟踪算法

参考博客: MOSSE算法的理解 MOSSE MOSSE代码 0 基础知识: 接上一篇 单目标跟踪综述,本文主要从MOSSE算法开始追溯相关滤波算法的起源(ps.这里让我想到了刺客信条里的起源)。 1. 先理解 相关操作和卷积操作&#x…

MOSSE 目标跟踪 解析

MOSS (Minimum Output Sum of Squared Error filter)(2010) 这篇文章是最早将相关的思想用到目标跟踪领域的。 相关滤波的思想:越是相关的两个目标相关值越大,也就是视频帧中与初始化目标越相似&#xff…

MOSSE相关滤波跟踪算法(二)

参考博客: 图像卷积与滤波 0 基础知识 接上一篇MOSSE相关滤波跟踪算法 线性滤波与卷积的基本概念 线性滤波过程:使用一个二维的滤波器矩阵(卷积核)在一副二维图像上滑动,对图像上每一个像素点,计算它的领…

Moss~

今年 2 月份,机器之心报道了复旦大学推出中国版 ChatGPT 的消息(参见《复旦发布中国版 ChatGPT:MOSS 开启测试冲上热搜,服务器挤爆》),引起了广泛关注。当时,邱锡鹏教授就曾表示将于四月份开源 …

目标跟踪经典论文阅读(1)MOSSE

摘要 虽然不常用,但相关滤波器可以通过旋转、遮挡和其他干扰来跟踪复杂的物体,其速度是目前最先进技术的20倍以上。最古老和最简单的相关滤波器使用简单的模板,通常在应用于跟踪时失败。更现代的方法,如ASEF和UMACE表现更好&…