Redis执行相关问题汇总

53 阅读1分钟

REDIS执行相关

REDIS是单线程还是多线程?

REDIS核心处理逻辑一直是单线程的;从REDIS4.0开始有些分支模块开始支持多线程,如删除list中的节点 UNLINK key;REDIS6.0之后网络I/O解包、回包也是多线程,这部分默认是关闭的,在REDIS.CONF文件中配置开启。

REDIS为什么核心处理一直用单线程?

REDIS的定位是做内存的KEY VALUE形式的NOSQL存储,应用场景是短平快热点数据处理,执行一般很快,所以执行不会存在瓶颈,这部分支持多线程反而因为要考虑多线程带来的消耗,上下文切换等问题,瓶颈一般出现在网络I/O解包、回包,所以REDIS6.0之后,这部分支持了多线程。我在自己的mac上用REDIS-BENCHMARK做过测试,读写性能都能有每秒十几万。

REDIS单线程为什么这么快?

  • 基于内存操作,天然地比基于磁盘的MYSQL这种操作快很多
  • 采用了增删改都很高效的数据结构,比如节约内存的ziplist,快速定位Skiplsit+HASHTABLE,以及后续的quickList等
  • 对于存在瓶颈的I/O,采用了多线程解包和回包以及I/O复用