Redis 为什么是单线程,依然很快?

1. 为什么 Redis 使用单线程?

因为Redis本身处理请求非常快,快到多线程带来的调度开销(线程切换、锁竞争)反而成了负担。

多线程确实能提高并发能力,但前提是:每个请求的处理比较耗时(相对于线程切换),比如访问磁盘,请求外部接口等等,而Redis的大多数命令是微秒级的,不值得使用多线程增加复杂度。

2,Redis为什么快?
  • 内存级操作:没有磁盘 IO 的开销。

  • IO 多路复用机制(epoll)加持:可以同时监听大量连接,快速响应请求。

3,什么是epoll,它为什么高效?

epoll 是 Linux 内核提供的一种事件驱动的 IO 多路复用方式。

和老式的 select、poll 不同,epoll 不需要遍历所有连接状态,而是由内核直接通知你“哪个连接就绪了”,性能大大提升。

4,Redis的瓶颈在哪?

虽然Redis处理命令很快,但在高并发的场景下,网络IO的数据搬运过程(读写socket)就变成了瓶颈,这里涉及了用户态 <-> 内核态的数据拷贝,成了Redis的性能短板。

5,为什么Redis 6开始使用多线程?

从Redis 6开始,为了突破IO传输的瓶颈,引入了“IO 多线程”机制。具体说,读取客户端数据,发送响应这些网络IO操作可以交给多线程去做,但是核心命令部分,仍然是单线程,这样既提高了网络IO的吞吐能力,又提高了CPU的利用率,还避免了线程并发带来的复杂性。

比喻版:Redis办事大厅
  • 门口是接待员epoll,负责通知谁来了,速度极快。
  • 办公室里有个极其出色的业务员Redis主线程,处理业务的速度也是极快。
  • 但是资料从前台送到办公室,从办公室送出去的速度跟不上了,Redis5之前只有一个送件员。

所以Redis 6开始启用了多个送件员,效率明显提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值