Redis单线程设计的,但为什么这么快

1、为什么是单线程设计?

 对于 redis 来说单线程的设计能够保证性能,多线程在设计和实现上会带来更多的复杂度。但是使用单线程的方式确实无法很好发挥多核 CPU 的性能,可以通过在单机开多个 Redis 实例来完善。

2. 从Redis的性能方面分析

Redis的性能非常之高,每秒可以承受10W+的QPS,主要取决于以下几个方面:

  • Redis大部分操作在内存完成
  • 采用IO多路复用机制
  • 非CPU密集型任务
  • 单线程的优势

纯内存操作

Redis 是基于内存的数据库,那不可避免的就要与磁盘数据库做对比。对于磁盘数据库来说,是需要将数据读取到内存里的,这个过程会受到磁盘 I/O 的限制。

而对于内存数据库来说,本身数据就存在于内存里,也就没有了这方面的开销。

采用IO多路复用机制

  • I/O :网络 I/O
  • 多路:多个 TCP 连接
  • 复用:共用一个线程或进程

生产环境中的使用,通常是多个客户端连接 Redis,然后各自发送命令至 Redis 服务器,最后服务端处理这些请求返回结果。

应对大量的请求,Redis 中使用 I/O 多路复用程序同时监听多个套接字,并将这些事件推送到一个队列里,然后逐个被执行。最终将结果返回给客户端。

非CPU密集型任务

采用单线程的缺点很明显,无法使用多核CPU。Redis作者提到,由于Redis的大部分操作并不是CPU密集型任务,而Redis的瓶颈在于内存和网络带宽。

在高并发请求下,Redis需要更多的内存和更高的网络带宽,否则瓶颈很容易出现在内存不够用和网络延迟等待的情况。

单线程的优点

  • 避免多线程上下文切换导致的性能损耗
  • 避免多线程访问共享资源加锁导致的性能损耗

3. 为什么不采用多进程或多线程处理?

  • ①多线程处理可能涉及到锁
  • ②多线程处理会涉及到线程切换而消耗 CPU

4. 单线程处理的劣势

  • ①耗时的命令会导致并发的下降,不只是读并发,写并发也会下降
  • ②无法发挥多核 CPU 性能,不过可以通过在单机开多个 Redis 实例来完善

5. Redis存在线程安全问题吗

Redis 采用了线程封闭的方式,把任务封闭在一个线程,自然避免了线程安全问题,不过对于需要依赖多个 Redis 操作(即多个 Redis 操作命令)的复合操作来说,依然需要锁,而且有可能是分布式锁。

  • 17
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值