天道不一定酬所有勤
但是,天道只酬勤

Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?

GitHub 19k Star 的Java工程师成神之路,不来了解一下吗!

Redis是目前广为人知的一个内存数据库,在各个场景中都有着非常丰富的应用,前段时间Redis推出了6.0的版本,在新版本中采用了多线程模型。

因为我们公司使用的内存数据库是自研的,按理说我对Redis的关注其实并不算多,但是因为Redis用的比较广泛,所以我需要了解一下这样方便我进行面试。

总不能候选人用过Redis,但是我非要问人家阿里的Tair是怎么回事吧。

所以,在Redis 6.0 推出之后,我想去了解下为什么采用多线程,现在采用的多线程和以前版本有什么区别?为什么这么晚才使用多线程?

Redis不是已经采用了多路复用技术吗?不是号称很高的性能了吗?为啥还要采用多线程模型呢?

本文就来分析下这些问题以及背后的思考。

Redis为什么最开始被设计成单线程的?

Redis作为一个成熟的分布式缓存框架,它由很多个模块组成,如网络请求模块、索引模块、存储模块、高可用集群支撑模块、数据操作模块等。

很多人说Redis是单线程的,就认为Redis中所有模块的操作都是单线程的,其实这是不对的。

我们所说的Redis单线程,指的是”其网络IO和键值对读写是由一个线程完成的”,也就是说,Redis中只有网络请求模块和数据操作模块是单线程的。而其他的如持久化存储模块、集群支撑模块等是多线程的。

所以说,Redis中并不是没有多线程模型的,早在Redis 4.0的时候就已经针对部分命令做了多线程化。

那么,为什么网络操作模块和数据存储模块最初并没有使用多线程呢?

这个问题的答案比较简单!因为:”没必要!”

为什么没必要呢?我们先来说一下,什么情况下要使用多线程?

Hollis此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“Hollis”或者“hollischuang”或者微信扫描右侧二维码都可以关注本站微信公众号。

(全文完)

扫描二维码,关注作者微信公众号
赞(4)
如未加特殊说明,此网站文章均为原创,转载必须注明出处。HollisChuang's Blog » Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?
分享到: 更多 (0)

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    有个疑问请教?IO 多路复用应该属于 同步非阻塞模型吧,select系统调用完全可以立即返回的,在unix 网络编程一书中指明了5中 io 模型,阻塞,非阻塞,io多路复用,信号驱动式Io,异步i o,前四种都同步IO 模型

    stephenCurry307个月前 (03-17)回复
  2. #2

    感觉tair和redis在线程处理上还是有异曲同工之妙的

    王星星7个月前 (03-18)回复

HollisChuang's Blog

联系我关于我