博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis 学与思系列(4)
阅读量:6955 次
发布时间:2019-06-27

本文共 847 字,大约阅读时间需要 2 分钟。

前言

本篇文章主要结合自己的理解重点解答以下几个问题:

  • 单线程的 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持久化机制相关的问题。

转载地址:http://szxil.baihongyu.com/

你可能感兴趣的文章
[体感游戏]关于体感游戏的一些思考(五) --- 导航
查看>>
2、Rabbitmq消费者确认机制
查看>>
c++ 植物类 继承多态 菱形继承
查看>>
21、Samba配置详解
查看>>
Eclipse反编译插件 Enhanced Class Decompiler
查看>>
第五元素 感
查看>>
Java性能调优
查看>>
JAVA桌面图表控件Chart FX for Java Desktop
查看>>
RH413日志服务器篇
查看>>
Android模拟器Genymotion
查看>>
ecshop网店系统v2.7.4
查看>>
php验证码代码实例
查看>>
Python收集主机信息
查看>>
java 假 "幻灯片"
查看>>
《编写高质量代码--改善JavaScript程序的188个建议》学习记录(一)
查看>>
Java中Set、List、Map
查看>>
Spring学习总结(6)——Spring之核心容器bean
查看>>
ubuntu重啟網卡提示"Job failed while stopping"解決方法!【参考别人的信息】
查看>>
<org manual>翻译--2.9 区块
查看>>
IOS 学习笔记 —— EGOTableViewPullRefresh使用 (一)
查看>>