【转载】单线程Redis性能为什么如此之高?

Redis的优点

性能高不只跟线程模型有关,它有不少缘由,主要有以下3点:数据库

  1. 基于内存;
  2. 单线程,但IO多路复用的利用率高;
  3. 数据结构为高性能优化。

下面分别阐述。性能优化

Redis的优点:基于内存

性能高低都是相对的,Redis是基于内存的数据库,相对的咱们拿传统的基于磁盘的数据库进行对比,如图:数据结构

其中,Redis数据库基于内存,分场景以下:多线程

  1. 数据查询类场景:内存中有全量的数据,能够直接从内存中取得;
  2. 数据写入类场景:若是配置的是同步持久化,写入内存的同时,也会写入磁盘,性能有所下降,可是因为Redis使用的是IO多路复用,同时没有线程竞争,所以IO利用率很高。
  3. 数据写入类场景:若是配置的是异步持久化,写入内存成功,即响应成功,不用等待磁盘的写入,性能很高。

传统磁盘数据库,分场景以下:异步

  1. 数据查询类场景:从磁盘中索引数据,查询并返回响应;
  2. 数据写入类场景:从将数据写入磁盘,同时更新磁盘中的索引文件。

以上能够看出:Redis是基于内存的数据库,大多数操做在内存中完成,内存的IO效率比磁盘要高的多。所以,这是Redis性能高的一个缘由。性能

Redis的优点:单线程,IO多路复用的IO利用率高

Redis是单线程的,一般若是单线程处理效率不高,都开多线程处理,可是Redis这里为何反到效率高了呢?优化

  1. 多线程存在线程竞争,且有锁的问题,多线程代码逻辑复杂,复杂的逻辑一般带来必定的性能损耗;
  2. Redis虽然是单线程,可是它的“I/ O 多路 复 用( multiplexing)”模型的IO利用率很高。

Redis的“I/ O 多路 复 用”是采用的效率最高的epoll模式,单线程却实现了多客户端接入,以及高IO利用率。以下图:线程

Redis的优点:数据结构为高性能优化

数据结构的优化主要有如下两点(篇幅有限,在这里就不展开了):3d

  1. Redis全程采用了Hash结构,所以存取效率很是高;
  2. 对于数据的存储内容也进行了压缩,节省了空间占用,也减小了io带宽。

来源:悟空问答blog

相关文章
相关标签/搜索