redis多路复用IO模型 以及 6.0引入的多线程模型

redis为什么选择单线程

  1. 采用多线程的话,会出现上下文切换的开销
  2. 采用多线程,会带来共享资源的竞争控制,比如多个线程同时访问同一个资源(键值)时,需要额外的手段来保障共享资源的正确性,会带来额外的开销。多线程开发会引入同步语句来保护共享资源的并发访问,会降低代码的可调试性和可维护性。

为什么redis采用单线程还能如此的快

  1. 大部分操作在内存上完成
  2. 采用了高效的数据结构,如 跳表、哈希表。
  3. 采用了多路IO复用机制,使其在网络IO的操作下,能并发的处理大量客户端的请求,实现高吞吐量。

IO多路复用指的是,Redis采用linux的Epoll机制,实现内核中同时存在多个监听中的套接字和已监听的套接字,内核会一直监听这些套接字,一但有请求到达时,就会放到事件队列中,redis的主线程会不断从事件队列中取事件去消费。

redis 6.0版本引入的多线程

redis在6.0版本引入了多线程,其实不仅仅实在6.0,在6.0版本之前,redis也有其他线程在工作,比如rdb文件备份。6.0之后实在IO多路复用的流程中引入了多线程。

为什么引入多线程,因为读写网络的网络调用在redis执行期间占据了大量的时间。如果把网络读写交给线程组实现,会带来很大的方便,多线程只用在网络的读写和协议解析,执行redis命令的仍然是主线程,也不会带来资源竞争等问题。

相关推荐
山岚的运维笔记7 分钟前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
qq_3537375415 分钟前
网站评分系统API
php
huaweichenai24 分钟前
中国工商银行支付对接
php
搂着猫睡的小鱼鱼1 小时前
Ozon 商品页数据解析与提取 API
爬虫·php
roman_日积跬步-终至千里1 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科1 小时前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦1 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
indexsunny2 小时前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
晚霞的不甘3 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
市场部需要一个软件开发岗位3 小时前
JAVA开发常见安全问题:纵向越权
java·数据库·安全