redis 学与思系列(4)

前言

本篇文章主要结合本身的理解重点解答如下几个问题:redis

  • 单线程的 Redis 为何这么快?
  • Pipeline有什么好处,为何要用pipeline?

这些问题都和redis 内部是如何执行命令有关。数据库

redis 内部命令的执行方式

咱们知道redis采用的是单线程和I/O多路复用模型来实现高性能的内存数据库服务的。
复制代码

如图,执行每一条命令的时候,都会通过如下几个过程:网络

  • 发送命令
  • 执行命令
  • 返回结果
    若是是同时发送多条命令时,这些命令都会进入一个队列中,而后逐步被执行。

一. 单线程的 Redis 为何这么快?

> 纯内存访问,redis 的全部数据都放在内存中,在内存中执行相应的指令响应很是快;
 > 非阻塞I/O,redis采用epoll做为IO 多路复用技术的实现,在加上redis自身的事件模型,减小了网络I/O消耗时间
 > 单线程架构:避免线程切换和竞态产生的消耗。
 > Redis 内部使用hash结构,读取速度快,还有一些特殊的数据结构,对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。
复制代码

二. Pipeline有什么好处,为何要用pipeline?

咱们知道每发送一条redis命令,都会通过(1)发送命令,(2)命令排队,(3)执行命令和(4)返回结果这几步,若是将这(1)(4)步的消耗时间称为一个RRT(往返时间),采用pipeline 能够极大的减小RRT, 由于采用pipeline 是将多条命令同时发送到服务端,以及多条命令的响应结果同时发送到客户端,这样采用批量的操做方式能够极大的减小这2部分的时间.数据结构

好比若是有n条命令,若是一条条发送,那么就须要n次RRT, 若是采用pipiline机制的话就只须要1次RRT架构

固然redis 提供了部分批量操做命令也能实现相同的效果
复制代码

三.小结

本文结合本身的理解简单的解答了一下上面的2个问题,下篇文章主要谈谈redis持久化机制相关的问题。性能

相关文章
相关标签/搜索