做PHP网站前端网站进不去,潮州网站seo,台州网站建设选浙江华企,做网站编辑需要什么文凭目录 一、Redis为何选择单线程#xff1f;
二、Redis真的是单线程吗#xff1f;
三、Redis6.0为何引入多线程
四、Redis6.0引入多线程之后#xff0c;性能的提升效果如何#xff1f; 一、Redis为何选择单线程#xff1f;
通常对于一个数据库来说#xff0c;CPU通常不…目录 一、Redis为何选择单线程
二、Redis真的是单线程吗
三、Redis6.0为何引入多线程
四、Redis6.0引入多线程之后性能的提升效果如何 一、Redis为何选择单线程
通常对于一个数据库来说CPU通常不是瓶颈因为大多数请求都不是CPU密集型的而是IO密集型的具体到Redis的话如果不考虑RDB/AOF持久化方案Redis是完全的内存操作执行速度是非常快的因此这部分操作通常不会是性能瓶颈Redis真正的性能瓶颈在于网络IO也就是就是客户端和服务端之间的网络延迟而为了减少延迟Redis选择了单线程的IO多路复用实现它的核心网络模型
具体来说
1. 避免过多的上下文切换如果是单线程则规避了进程内频繁的线程切换开销。因为程序始终运行在进程的单个线程内没有多线程切换场景
2. 避免同步锁的开销 如果说Redis选择多线程模型因为Redis是一个数据库势必涉及到底层数据同步的问题必然会引入某些同步机制。比如锁而且我们知道 Redis不仅提供了key - value数据结构而且还有list、set、hash等结构。不同的数据结构对同步访问的加锁粒度是不同的。可能会导致在操作数据的过程中会带来很多加锁解锁上面的开销。增加程序复杂度的同时还会降低性能
3. 简单可维护如果说Redis使用多线程模式那么底层所有的数据结构都必须设计为线程安全的这无疑会使得Redis的实现变得更为复杂
二、Redis真的是单线程吗
主体核心来说是单线程的 就是执行命令仍然是单线程的
但是有两个节点需要注意是多线程的
redis4.0引入多线程处理异步任务
主要就是针对那些非常耗时的命令将这些命令异步话防止阻塞
redis6.0在核心网络模型中引入了多线程IO
但是这个主要是为了处理网络数据的读写和协议的解析执行命令仍然是单线程
三、Redis6.0为何引入多线程
随着互联网的高速发展互联网业务系统要处理的线上流量越来越大这样的话Redis的IO瓶颈会越来越大Redis的单线程模型会导致系统消耗很多的CPU时间在网络IO上面从而降低了吞吐量
要提升Redis的性能有两个方向
1. 优化网络模型
2. 提高机器内存读写速度
后者依赖于硬件暂时无解。只能从前者入手网络IO的优化可以分为两个方向
1. 零拷贝或者DPDK技术
2. 利用多核优势
零拷贝技术有其局限性无法适配Redis这一复杂的网络IO场景。
而DPDK技术通过旁路网卡IO绕过内核协议栈太过于复杂可能还需要内核甚至是硬件的支持
总结来说Redis支持多线程就两个原因
1、充分利用CPU资源
2. 分摊Redis 同步IO读写负担
四、Redis6.0引入多线程之后性能的提升效果如何
Redis作者说这个性能至少提升一倍
国内也有大牛测试过性能几乎翻倍了