diff --git a/public/api/i/2025/09/10/12umpxk-1.webp b/public/api/i/2025/09/10/12umpxk-1.webp new file mode 100644 index 0000000..78e5d42 Binary files /dev/null and b/public/api/i/2025/09/10/12umpxk-1.webp differ diff --git a/public/api/i/2025/09/10/12uomji-1.webp b/public/api/i/2025/09/10/12uomji-1.webp new file mode 100644 index 0000000..e96d434 Binary files /dev/null and b/public/api/i/2025/09/10/12uomji-1.webp differ diff --git a/src/content/posts/中间件/Redis/Redis为什么快.md b/src/content/posts/中间件/Redis/Redis为什么快.md index ef238d5..7f054f0 100644 --- a/src/content/posts/中间件/Redis/Redis为什么快.md +++ b/src/content/posts/中间件/Redis/Redis为什么快.md @@ -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多核的优势,提升了性能。 ![](https://blog.meowrain.cn/api/i/2025/07/19/sbddqg-1.webp) 4. Redis 对底层数据结构做了极致的优化,比如说 String 的底层数据结构动态字符串支持动态扩容、预分配冗余空间,能够减少内存碎片和内存分配的开销。 + + + +1.基于内存,内存IO比磁盘快 +2. 采用 单线程 + 非阻塞 I/O + I/O 多路复用(高效处理并发)模型 +3. 网络IO用上了多线程 +4. 底层数据结构被专门优化过 + +- **单线程**:单线程可以避免多线程的数据竞争和上下文切换开销。 +- **非阻塞IO**,Redis对客户端连接的I/O操作设置为非阻塞,主线程发起I/O操作后,不需要等待结果返回,可以继续处理其它事件。 +- **I/O多路复用**: 主线程可以同时监听多个客户端连接的I/O事件,一旦某个事件就绪,在进行集中处理。 +- + diff --git a/src/content/posts/中间件/Redis/为什么Redis设计为单线程而后面版本为啥又引入多线程呢.md b/src/content/posts/中间件/Redis/为什么Redis设计为单线程而后面版本为啥又引入多线程呢.md new file mode 100644 index 0000000..ec94533 --- /dev/null +++ b/src/content/posts/中间件/Redis/为什么Redis设计为单线程而后面版本为啥又引入多线程呢.md @@ -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 \ No newline at end of file