sss
This commit is contained in:
BIN
public/api/i/2025/09/10/12umpxk-1.webp
Normal file
BIN
public/api/i/2025/09/10/12umpxk-1.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
BIN
public/api/i/2025/09/10/12uomji-1.webp
Normal file
BIN
public/api/i/2025/09/10/12uomji-1.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -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多核的优势,提升了性能。
|
||||||

|

|
||||||
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事件,一旦某个事件就绪,在进行集中处理。
|
||||||
|
-
|
||||||
|
|
||||||
|
|||||||
29
src/content/posts/中间件/Redis/为什么Redis设计为单线程而后面版本为啥又引入多线程呢.md
Normal file
29
src/content/posts/中间件/Redis/为什么Redis设计为单线程而后面版本为啥又引入多线程呢.md
Normal 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
|
||||||
Reference in New Issue
Block a user