令仔学Redis----单线程架构

Posted 令仔很忙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了令仔学Redis----单线程架构相关的知识,希望对你有一定的参考价值。

    Redis是一种基于键值对(key-value)的NoSQL数据库,包含多种数据结构。官网上给出的数字是读写性能可以达到10万/秒,可见速度之快。

    做个简单的例子,同时开启5个redis客户端,同时执行下面的命令:

incr  number

    每一条命令的执行过程都是一样的,发送命令,执行命令,返回结果。

    如果是在多线程的情况下,不作任何处理很可能就会造成数据最终结果出现问题。但是Redis不会,Redis的是单线程的处理方式,新的命令并不会立即被执行,而是统一的放到了队列中,一条一条的执行.

    这样的处理就不会出现并发的问题。那为什么单线程的情况下还能这么快?通常的来讲,单线程的处理能力要比多线程的处理方式要差,举个例子:10000斤的货物,每一辆车的运载能力是每次1000斤,那么如果只有一辆车的话需要10次才能完成,但是如果有10辆车呢,一次就能完成。
    那为什么Redis使用单线程模型就会达到每秒万级别的处理能力?归结为以下三点:

1、纯内存访问,Redis把所有的数据都放到了内存中,内存的响应时间大约在100纳秒,这也是Redis能有百万级别处理能力的重要基础。
2、还有一点就是Redis采用了epoll作为I/O多路复用技术实现。同时Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上消耗太多的时间。关于这一点会在后续的博客中深入的讲解
3、单线程减少了 线程切换和和竟态产生的消耗。

    但是单线程还有一个问题:就是对于每个命令的执行时间是有要求的,如果其中的某一个命令执行过长,会造成其他命令的阻塞,这对于Redis这种高性能的服务来说是致命的,所以Redis是面向快速执行场景的数据库。

以上是关于令仔学Redis----单线程架构的主要内容,如果未能解决你的问题,请参考以下文章

令仔学Redis----浅析Redis存储数据时格式的设计

令仔学多线程系列----每天定点执行指定任务

令仔学多线程系列----同步工具类CountDownLatch

令仔学多线程系列----自定义Queue队列

令仔学MySql系列----explain详解

高并发架构系列:Redis为什么是单线程及高并发快的3大原因详解