为什么说Redis单线程效率高

Redis效率高的主要原因有下面几个:

  • 基于内存操作,速度非常快
  • 采用单线程,避免了上下文的切换导致消耗CPU
  • 采用单线程,不用去考虑各种加锁释放锁的问题
  • 使用IO多路复用模型,非阻塞IO

Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。

这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 Memcached 差!
Redis
上图是Redis官方的测试数据,横轴表示连接数,纵轴表示QPS。

如果Redis采用的是多线程,那么CPU会在多个线程之间来回切换,在如此高的QPS下,多个线程的切换时特别频繁的,十分消耗CPU。

假设我们有三个连接同时执行下面的操作:

incr count

由于Redis使用单线程来处理命令的,所以一条命令来了之后不会立即执行,而是将命令加到一个队列中,然后逐个被执行,这样就能保证在不加锁的情况下保证不会产生并发问题。

如果Redis采用多线程执行命令,那么对于三个连接同时执行incr操作的时候,就需要添加锁来保证线程的安全性了,会大大降低执行效率。

Redis采用非阻塞IO,使用epoll作为IO多路复用技术的实现,再加上Redis自身的树碱处理模型将epoll中的连接、读写、关闭都转为事件,不在网络IO上浪费过多的事件。

当然了,单线程机制也不是万能的,也会存在一个的问题:对于每个命令的执行事件是有要求的。如果某个命令执行事件过长,会导致其他命令被阻塞,对于Redis这种高性能的服务来说是致命的。

所以即使Redis性能很高,我们也要合理的去使用Redis,不合理的使用也会导致很多问题。


喜欢这篇文章的朋友,欢迎扫描下图关注公众号lebronchen,第一时间收到更新内容。
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值