核心知识点:

1.单线程机制:所有命令放在一个队列中

2.为什么Redis单线程这么快?内存中执行、非IO阻塞、避免线程切换和竞态产生的消耗。

3.单线程的问题?一个命令不能执行太长时间,不然会阻塞其他命令的执行。

Redis使用单线程架构和I/O多路复用模型来实现高性能的内存数据服务。

下面尝试说明Redis单线程命令处理机制,接着分析Redis单线程模型为什么性能如此之高。

1.单线程命令的处理机制

Redis客户端与服务端的模型可以简化成下图:

每次客户端调用都经历了发送命令、执行命令、返回结果三个过程。

因为Redis是单线程来处理命令,所以一条命令从客户端到达服务端不会立即被执行,所有的命令都会进入一个队列,然后逐个被执行。

所有即使是有先后顺序的几个命令到达服务端的执行顺序也是不确定的,因为中间有网络传输。

但是可以肯定的是,不会有两条命令被同时执行。

这样就不会产生并发问题,这就是Redis单线程的基本模型。

2.为什么单线程还能这么快?

通常来将,单线程的处理能力要比多线程差,因为10个人干活肯定要比1个人干活快。

那么为什么Redis使用单线程模型会达到每秒万级别的处理能力了?可以将其归结为三点:

第一,纯内存访问,Redis将所有数据放在内存中,内存的响应时长大约为100纳秒,这是Redis达到每秒万级别访问的重要基础。

第二,非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,

  再加上Redis自身的事件处理模型将epoll中连接、读写、关闭都转换为事件,不在网络I/O上浪费过多时间。

第三,单线程避免了线程切换和竞态产生的消耗

既然单线程就能达到如此高的性能,那么也不失为一种不错的选择,因为单线程能带来几个好处:

首先,单线程可以简化数据结果和算法的实现。在高级语言中,并发数据结构不但实现很难而且开发测试比较麻烦。

其次,单线程避免了线程切换和竞态产生的消耗,对于服务端开发来所,锁和线程切换通常是性能杀手。

但是,单线程会有一个问题:对于每个命令的执行事件是有要求的。如果某个命令执行过长,会造成其他命令的阻塞,

对于Redis这种高性能的服务来说是致命的,所以Redis是面向快速执行场景的数据库。

API的理解和使用——单线程架构的更多相关文章

  1. Redis 入门到分布式 (二)API的理解和使用

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 内容: 通用命令 单线程架构 数据结构和内部编码 一.常用的通用命令: keys       计算所有的 ...

  2. 2.API的理解和使用

    标题 : 2.API的理解和使用 目录 : Redis 序号 : 2 ​ zset的成员是唯一的,但分数(score)却可以重复. ​ 有序集合的内部编码 1.ziplist(压缩列表):当有序集合的 ...

  3. 理解本真的REST架构风格

       http://kb.cnblogs.com/page/186516/ 引子 在移动互联网.云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过“REST”这个buzzword,显然已经落 ...

  4. 高可用Redis(一):通用命令,数据结构和内部编码,单线程架构

    1.通用API 1.1 keys命令和dbsize命令 keys * 遍历所有key keys [pattern] 遍历模式下所有的key dbsize 计算Redis中所有key的总数 例子: 12 ...

  5. 【转载】理解本真的REST架构风格

    本文将带您领略REST架构的起源.与Web的关系.REST架构的本质及特性,以及REST架构与其他架构风格之间的比较. 引子 在移动互联网.云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过 ...

  6. 认证鉴权与API权限控制在微服务架构中的设计与实现(四)

    引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的完结篇,前面三篇已经将认证鉴权与API权限控制的流程和主要细节讲解完.本文比较长,对这个系列进行收尾,主要内容包括 ...

  7. 深入理解Hadoop之HDFS架构

    Hadoop分布式文件系统(HDFS)是一种分布式文件系统.它与现有的分布式文件系统有许多相似之处.但是,与其他分布式文件系统的差异是值得我们注意的: HDFS具有高度容错能力,旨在部署在低成本硬件上 ...

  8. 理解本真的REST架构风格(转,解释的最清楚)

    add by zhj start: Fielding在批判性继承前人研究成果的基础上,建立起来一整套研究和评价软件架构的方法论.这套方法论的核心是“架构风格”这个概念.架构风格是一种研究和评价软件架构 ...

  9. RESTful API的理解

    技术交流的时候遇到了这样的一个问题,被问及开发中用到的是不是Restful API,我说的是,我们现在用到的不属于完全是Restful API.因为我了解到的Restful API,是 通过具体的UR ...

随机推荐

  1. iis无法启动的解决办法-卸掉KB939373补丁

    在本地计算机无法启动 world wide web Publishing 服务错误127:找不到指定的程序 在网上搜索了一下,发现,回答的五花八门, 1.有的说重新安装IIS的,(我重新安装了,还是不 ...

  2. poj 3648 线段树成段更新

    线段树成段更新需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候.延迟标记的意思是:这个区间的左右儿子都需要被更新,但是当 ...

  3. yii2操作数据库 mysql 读写分离 主从复制

    转载地址:http://www.kuitao8.com/20150115/3471.shtml 开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的&quo ...

  4. MySQL---SQL记录

    MySQL在已有字段后追加相应的值值 需求:在MySQL中的topic表中,需要将每一个cover字段后添加上: -400.webp update topic set cover = CONCAT(c ...

  5. 转: RPC框架 远程对象服务引擎Hprose

    http://www.cnblogs.com/chenxizhang/archive/2010/07/18/1780258.html

  6. 使用Unitils测试DAO层

    Spring 的测试框架为我们提供一个强大的测试环境,解决日常单元测试中遇到的大部分测试难题:如运行多个测试用例和测试方法时,Spring上下文只需创建一次:数据库现场不受破坏:方便手工指定Sprin ...

  7. Web前端开发规范收集

    在Web开发中,后端跟前端配合非常easy出现故障.这时我们就须要一些规则来约束前端任意的编写. CSS编程规范 1.      属性书写基本顺序 a.      先位置属性(position, to ...

  8. mysql 配置 安装和 root password 更改

    第一步: 修改my.ini文件,替换为以下内容 (skip_grant_tables***重点) # For advice on how to change settings please see # ...

  9. 模拟IE各种版本的方法

    下载360极速浏览器.开启“兼容模式” 默认会是IE7.可以通过控制台(Ctrl + shift + I)调整各个版本

  10. 小白学习python之路(二):安装开发工具

    引言 上一章我们安装配置了python3.7,这一章我们安装python的开发工具,我用的pycharm2019 安装 工具连接:https://u20538204.ctfile.com/fs/205 ...