zoukankan      html  css  js  c++  java
  • 【转载】单线程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的优势:数据结构为高性能优化

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

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

    来源:悟空问答

  • 相关阅读:
    详解C#委托,事件与回调函数
    JavaScript Dictionary
    jQuery匹配各种条件的选择器用法
    通用Json的处理办法
    JavaScript 创建类/对象的几种方式
    捕获和记录SQL Server中发生的死锁
    [转] HTML 获取屏幕、浏览器、页面的高度宽度
    [转] 实时监听input输入的变化(兼容主流浏览器)
    [转] Web移动端Fixed布局的解决方案
    [转] offsetParent 到底是哪一个?
  • 原文地址:https://www.cnblogs.com/bjkandy/p/12055845.html
Copyright © 2011-2022 走看看