首页 > 自考资讯 > 高考百科

Redis是单线程还是多线程?一文搞透! redis是单线程还是多线程的

小条 2024-10-30

9665493d6ac74b6297ac4af754dc6d2c~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730873893&x-signature=b9gC1VgTYaBW68psj4bzPYOx5lk%3D Redis是单线程还是多线程?这是大公司面试中常见的问题。下面我们将详细讲解Redis是单线程还是多线程。

本文收录于mikechen的30万+字原文《阿里架构师进阶专题合集》。

79654501c9244ab9851b79eb3a91b83d~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730873893&x-signature=z%2BQO0feY0I39m38lgHvYu8%2FdI0M%3D

Redis单线程

Redis在4.0之前使用单线程模式。即网络IO和key-value存储服务是在一个线程中完成的。

cc5f708996844d25934b42df66a408a9~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730873893&x-signature=RZqEPQt41yWxZB4AkdZpSLxKhyM%3D 使用单线程的原因是:

1.单线程,高效

单线程模式使用Redis可以让开发和维护变得更容易,因为单线程模式让开发和调试更容易。

2. 基于内存的操作

性能比较高,Redis所有数据都存储在内存中,基于内存的速度非常高,每秒能够处理10万个请求。

c6aaee9ba170459b9bfa36bc20c8c6e2~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730873893&x-signature=xkIPnI%2FJ0Nd8%2B7%2Bai%2Fl9Xi9LZAQ%3D3.IO复用

Redis 使用IO 多路复用来监控多个连接的客户端。大多数操作纯粹基于内存,因此速度非常快,并且可以使用单线程连接处理多个请求。

01c085e51d10467588899629da1cc6a7~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730873893&x-signature=P7KxJo7G3J3KpaI6Dv4il92vuKg%3D4 避免上下文切换。

单线程模型避免了不必要的上下文切换和多线程争用,节省了多线程切换带来的时间和性能开销,并且消除了单线程所没有的死锁问题。

对于Redis,主要的性能瓶颈不是CPU,而是内存或网络带宽。

Redis多线程

虽然Redis的核心是单线程,但是也使用多线程来解决一些功能,这样可以更快地提高Redis性能。

b4e88ff33a844fa09583ec24ce9dbffb~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730873893&x-signature=lior904DN%2Bl23zG3rtokQmI98%2F4%3D1.Redis网络IO处理

在Redis6.0之前,Redis从处理网络IO到实际处理读写命令都是单线程的,Redis性能的瓶颈主要是网络IO。

因此,从Redis 6.0开始,使用多个IO线程来处理网络请求,以提高网络请求处理的并行度。

2242ca8cde084da2b41d0a0f316c37d7~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730873893&x-signature=CmairpC8He0A4%2ByNmRCicNbLQuY%3DRedis仅将IO读写改为多线程,命令执行仍由单线程主线程执行。因此,使用Redis多线程时不存在线程安全问题。

2. 持久多线程

如果Redis持久化的AOF文件太大,Redis可以在后台创建一个子进程来重写AOF文件,子进程使用多个线程同时处理AOF文件的内容,增加重写速度。

3.多线程异步删除

为了解决数据删除慢的问题,主要是滞后,有3个相关指令:UNLINK、FLUSHALL ASYNC、FLUSHDB ASYNC,可以在后台执行删除任务。

需要注意的是,虽然Redis使用了多线程,但是Redis的核心仍然是单线程,所有数据操作都是在单个线程中执行的。

最重要的是

本文收录于mikechen的30万+字原文《阿里架构师进阶专题合集》。

128af82dc95f40a0a39726ab1f754192~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730873893&x-signature=zGfUGgmwTFQs35cReM18ez4Y3Y8%3D

版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。

猜你喜欢