首页 > 数据库 >Redis是单线程还是多线程的?

Redis是单线程还是多线程的?

时间:2024-07-10 18:27:42浏览次数:12  
标签:单线程 Redis redis 处理 版本 多线程

讲Redis是单线程还是多线程的需要根据redis各版本的一个变化,在Redis的老版本中,redis是单线程的,redis的数据处理读写命令都是由一个线程完成,并且速度很快,是因为redis的数据都是存储在内存中的,避免了磁盘I/O的瓶颈,有通过非阻塞IO和事件驱动模型,使得单线程依旧可以处理大量的数据并发和请求。

明确几点:

1. 在任何版本中,redis的数据命令读写处理,例如:GTE和SET等,还是单个主线程执行的,这样确保了原子性和一致性,

2. redis的数据是存在内存中的,单线程已经可以非常高效的处理大量的并发操作。

2. 单线程意味着在任何时候,reids只有一个操作在执行。

后续随着时代的发展,对性能的要求也越来越高,单线程的redis的某些功能在一些场景下出现性能瓶颈,开始引入了多线程的概念。下面看各版本Redis的变化。

Redis的4.0版本

在这个版本redis引入了模块系统,但是核心的服务器并没有使用多线程来处理客户端的请求和命令,所有的操作和命令执行还是由主线程进行操作的。模块系统可以让开发人员取扩展Redis的功能和模块,这些扩展的功能和模块可以使用自己的多线程。

Redis的5.0版本

在这个版本Redis引入了新的数据类型,流数据类型(stream data type),这个不在多说。

Redis的6.0版本

就是在6.0版本,redis开始引入了多线程I/O,这是一个重大的升级,之前的版本虽然在很高效,但是在网络I/O操作一直是单线程负责,这在大规模并发场景下可能会成为性能瓶颈,所以引入了多线程来处理客户端请求的的网路读写操作,在不影响Redis执行命令的一致和原子性情况下,提高了并发处理能力。

Redis是使用IO多路复用技术来同时处理多个客户端连接的网络请求的,可以看这篇文章讲的就是Redis的IO多路复用:Redis的IO多路复用-CSDN博客

假设我们有一个高流量的游戏服务器,使用 Redis 6.0 维护玩家的实时状态和会话信息。在非常繁忙的时间,数以万计的玩家可能会同时在线,并频繁地读写数据到 Redis。在单线程I/O模型中,即使 Redis 能够快速处理每一个操作,单个线程依然可能成为处理所有网络数据的瓶颈。启用多线程 I/O 后,读写操作可以在多个线程间分摊,减轻主线程的压力,并提高总体吞吐量。

如果游戏服务器有 16 个 CPU 核心,我们可能会在 redis.conf 配置文件中,将 io-threads 设置为 4 或 8,以有效分配资源并避免上下文切换开销太大:

io-threads 4 
io-threads-do-reads yes

启用了多线程 I/O 的 Redis 6.0 服务器将能更好地处理游戏过程中的大量并发网络请求,特别是在玩家数量激增的情况下。

标签:单线程,Redis,redis,处理,版本,多线程
From: https://blog.csdn.net/m0_64466960/article/details/140328828

相关文章

  • 你真的懂多线程吗?多线程 并行处理 CPU 操作系统
    了解多线程、并行处理首先需要了解什么CPU、CPU核数、操作系统CPU物理数即电脑拥有的物理CPU数量,普通电脑一般只有一个CPU插槽,也就是只有一个物理CPU。我们日常说的CPU,就是指封装好的一个物理CPU,作为商品进行售卖。但在编程讨论时,某些情况下,我们说的CPU含义又是指其中一个运算......
  • Windows的Redis安装及执行文件的路径修改
    一、下载redis的zip文件下载地址:https://github.com/tporadowski/redis/releases这里我们下载Redis-x64-xxx.zip压缩包到C盘,解压至重新命名为redis的文件夹。二、命令配置1.打开redis文件夹,在路径上输入cmd进入命令窗口(也可以打开一个cmd窗口使用cd命令切换目录......
  • Redis基础教程(十八):Redis管道技术
    ......
  • Redis基础教程(十九):Redis分区
    ......
  • Redis安装部署和常用命令
    一、Redis基本概念端口号:63791.关系型数据库和非关系型数据库区别 SQLNoSQL存储结构二维表格结构不固定的,键值对、文档、索引、图形结构、时间序列等扩展方式纵向扩展(提升硬件性能)横向扩展(增加服务器节点数量)事务支持基于ACID原则,事务控制更稳定,细粒度更高......
  • springboot项目一直在打印Redis链接信息Reconnecting, last destination was
    控制台打印如下:15:03:26.279[lettuce-eventExecutorLoop-1-4]INFOi.l.c.p.ConnectionWatchdog-[log,171]-Reconnecting,lastdestinationwas/192.168.0.6:637915:03:26.282[lettuce-nioEventLoop-4-2]INFOi.l.c.p.ReconnectionHandler-[lambda$null$3,174]-Rec......
  • MySQL和Redis更新一致性问题
    1.先更新数据库,再更新缓存适用场景:适用于对数据一致性要求不是特别高,且缓存更新失败对系统影响较小的场景。例如,某些非关键数据的缓存更新。风险:如果缓存更新失败,会导致数据库和缓存数据不一致。//更新数据库updateMySQL(data);//更新缓存updateRedis(data);2......
  • 《基于 LatentFactor + Redis + ES 实现动态药房分配方法》
    ......
  • 【转】-多线程之Callable
    Java并发编程:Callable、Future和FutureTask该博客转载自​Matrix海子​的​Java并发编程:Callable、Future和FutureTask在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行......
  • redis:常用客户端命令(redis-cli)
    一,查看redis所有配置使用命令:CONFIGGET*例:127.0.0.1:6379>CONFIGGET*1)"cluster-announce-bus-port"2)"0"3)"syslog-ident"4)"redis"5)"enable-module-command"6)"no"7)"mi......