This commit is contained in:
2025-09-10 23:56:45 +08:00
parent f0a33b8cae
commit 7b4b1169ca
4 changed files with 43 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -1,6 +1,6 @@
--- ---
title: Redis为什么快 title: Redis为什么快
published: 2025-07-19 published: 2025-09-10
description: '' description: ''
image: 'https://blog.meowrain.cn/api/i/2025/07/19/p9zr81-1.webp' image: 'https://blog.meowrain.cn/api/i/2025/07/19/p9zr81-1.webp'
tags: [Redis, 中间件] tags: [Redis, 中间件]
@@ -16,3 +16,16 @@ lang: ''
3. Redis6.0引入多线程机制把网络和I/O处理放到多个线程中减少了单线程的瓶颈网络IO交给线程池处理命令仍然在主线程中进行。充分利用CPU多核的优势提升了性能。 3. Redis6.0引入多线程机制把网络和I/O处理放到多个线程中减少了单线程的瓶颈网络IO交给线程池处理命令仍然在主线程中进行。充分利用CPU多核的优势提升了性能。
![](https://blog.meowrain.cn/api/i/2025/07/19/sbddqg-1.webp) ![](https://blog.meowrain.cn/api/i/2025/07/19/sbddqg-1.webp)
4. Redis 对底层数据结构做了极致的优化,比如说 String 的底层数据结构动态字符串支持动态扩容、预分配冗余空间,能够减少内存碎片和内存分配的开销。 4. Redis 对底层数据结构做了极致的优化,比如说 String 的底层数据结构动态字符串支持动态扩容、预分配冗余空间,能够减少内存碎片和内存分配的开销。
1.基于内存内存IO比磁盘快
2. 采用 单线程 + 非阻塞 I/O + I/O 多路复用(高效处理并发)模型
3. 网络IO用上了多线程
4. 底层数据结构被专门优化过
- **单线程**:单线程可以避免多线程的数据竞争和上下文切换开销。
- **非阻塞IO**Redis对客户端连接的I/O操作设置为非阻塞主线程发起I/O操作后不需要等待结果返回可以继续处理其它事件。
- **I/O多路复用**: 主线程可以同时监听多个客户端连接的I/O事件一旦某个事件就绪在进行集中处理。
-

View File

@@ -0,0 +1,29 @@
---
title: 为什么Redis设计为单线程而后面版本为啥又引入多线程呢
published: 2025-09-10
description: ''
image: ''
tags: [Redis, 中间件]
category: '中间件 > Redis'
draft: false
lang: ''
---
# 为什么Redis设计为单线程而后面版本为啥又引入多线程呢
## 单线程设计原因:
1. Redis基于内存大多数操作性能瓶颈来自于CPU
2. 使用单线程模型,代码简单,处理逻辑清晰,也减少了上下文切换带来的性能开销。
3. Redis在单线程情况下使用I/O多路复用模型就能提高Redis的I/O利用率了。
## 6.0 引入多线程的原因
主要是为了应对网络I/O的瓶颈提高网络I/O处理速度。
随着数据规模的增长和请求量的增加Redis的执行瓶颈主要在网络I/O引入多线程能提高网络I/O处理速度。
## Redis引入多线程后有没有线程安全问题
没有
Redis6.0只针对网络请求模块采用的是多线程,对于读写命令部分还是用的单线程,所以所谓的线程安全问题也就不存在了。
Redis6.0想要开启多线程,需要配置`io-threads-do-reads`参数为yes