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为什么快
|
||||
published: 2025-07-19
|
||||
published: 2025-09-10
|
||||
description: ''
|
||||
image: 'https://blog.meowrain.cn/api/i/2025/07/19/p9zr81-1.webp'
|
||||
tags: [Redis, 中间件]
|
||||
@@ -16,3 +16,16 @@ lang: ''
|
||||
3. Redis6.0引入多线程机制,把网络和I/O处理放到多个线程中,减少了单线程的瓶颈,网络IO交给线程池处理,命令仍然在主线程中进行。充分利用CPU多核的优势,提升了性能。
|
||||

|
||||
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