简介


使用Redis的小伙伴们都希望能够获取最大的性能收获,不管什么操作,越快越好。

然而,在实际的使用中,却发现有些指令的执行并不像想象中的那样flash。

怎么办?我觉得首先需要回答下面这个问题:

到底是Redis本身慢了,还是业务逻辑性能出了问题?

本文主要针对第一种情况,来进行一下Redis延迟的基准性能测试。

如果基准测试没有问题,那么Redis自身大概是没有什么问题的,就要检查一下业务逻辑或者使用的指令是否是慢指令了。

基本延迟


下面的测试都是使用 redis-cli 客户端进行,基础命令如下:

redis-cli -h 192.168.1.66 -p 6379

直接使用该客户端可以避免其他因素对测试结果的影响。

理论上,如果是在本机测试,结果就是Redis自身延迟。如果不是本机,则多了一次网络传输的延迟(这个需要自行评估)。

基础的延迟测试命令如下:

redis-cli -h 127.0.0.1 -p 6379 --latency

该命令会统计三个延迟指标:最小值(min),最大值(max)和平均值(avg),单位是ms。

通过 ctrl + c 结束命令。

说明:

  • 该指令统计的是 PING 指令的耗时
  • 其中不包括连接建立时间
  • 连接的是本地Redis服务,也不包含网络传输时间

示例结果如下:

% redis-cli -h 127.0.0.1 -p 6379 --latency
min: 0, max: 1, avg: 0.16 (3054 samples)

可见平均延迟为0.16ms,即160us,共统计了3054个样本数据。

在不同的服务器上安装的Redis,性能会有不同。

比如我同样在虚拟机上跑了一下:

min: 0, max: 1, avg: 0.23 (3123 samples)

结果要比物理机上差一些。

也可以使用以下命令测试:

redis-cli -h 127.0.0.1 -p 6379 --latency-history -i 10

该命令可以按间隔打印结果,间隔时间由-i参数指定,默认15s。

物理机上测试如下:

% redis-cli --latency-history  -i 10
min: 0, max: 1, avg: 0.16 (974 samples) -- 10.01 seconds range
min: 0, max: 1, avg: 0.18 (972 samples) -- 10.00 seconds range
min: 0, max: 1, avg: 0.18 (972 samples) -- 10.01 seconds range
min: 0, max: 1, avg: 0.17 (973 samples) -- 10.01 seconds range
min: 0, max: 1, avg: 0.16 (972 samples) -- 10.01 seconds range

虚拟机测试结果:

# redis-cli -p 7000 --latency-history  -i 10
min: 0, max: 1, avg: 0.24 (969 samples) -- 10.01 seconds range
min: 0, max: 1, avg: 0.23 (967 samples) -- 10.01 seconds range
min: 0, max: 1, avg: 0.23 (967 samples) -- 10.01 seconds range
min: 0, max: 1, avg: 0.22 (967 samples) -- 10.01 seconds range
min: 0, max: 1, avg: 0.23 (966 samples) -- 10.00 seconds range

固有延迟


Redis还提供了测试固有延迟基准的方法:

redis-cli --intrinsic-latency 100

注意:

  • 100指的是测试时长为100s,可以任意指定
  • 该指令测试的是操作系统内核调用进程的最大延迟
  • 该延迟是固有的,业务延迟不可能比它还小。可以把它作为延迟的最低基准
  • 该指令需要在运行Redis服务的机器上运行
  • 该指令并不会真正连接Redis服务
  • 在不同的系统上,或者在同一系统的不同时间段测试时,都可能得到不同的结果
  • 系统负载大小对测试结果有较大影响

物理机上测试结果:

% redis-cli --intrinsic-latency 100
Max latency so far: 1 microseconds.
Max latency so far: 6 microseconds.
Max latency so far: 9 microseconds.
Max latency so far: 10 microseconds.
Max latency so far: 11 microseconds.
Max latency so far: 153 microseconds.
Max latency so far: 155 microseconds.
Max latency so far: 156 microseconds.
Max latency so far: 176 microseconds.
Max latency so far: 177 microseconds.
Max latency so far: 178 microseconds.1838554810 total runs (avg latency: 0.0544 microseconds / 54.39 nanoseconds per run).
Worst run took 3273x longer than the average latency.

虚拟机上测试结果:

# redis-cli --intrinsic-latency 100
Max latency so far: 1 microseconds.
Max latency so far: 13 microseconds.
Max latency so far: 17 microseconds.
Max latency so far: 18 microseconds.
Max latency so far: 23 microseconds.
Max latency so far: 30 microseconds.
Max latency so far: 39 microseconds.
Max latency so far: 65 microseconds.
Max latency so far: 74 microseconds.
Max latency so far: 138 microseconds.
Max latency so far: 144 microseconds.
Max latency so far: 160 microseconds.
Max latency so far: 188 microseconds.
Max latency so far: 190 microseconds.
Max latency so far: 243 microseconds.
Max latency so far: 364 microseconds.829284793 total runs (avg latency: 0.1206 microseconds / 120.59 nanoseconds per run).
Worst run took 3019x longer than the average latency.

定位延迟


如果发现延迟较大,有一些方法可以定位延迟出现的情况:

  • 确保没有执行慢指令(慢指令会导致Redis服务阻塞),可以使用 slowlog 查看,具体:https://redis.io/commands/slowlog
  • 关闭内核Transparent huge pages:echo never > /sys/kernel/mm/transparent_hugepage/enabled(需要重启Redis服务)
  • 测试固有延迟(如果固有延迟已经较大,可能是操作系统负载较高或性能不佳)
  • 使用Redis的Latency Monitoring功能监测延迟情况,具体:https://redis.io/topics/latency-monitor

小结


有了各种客户端的支持,Redis是极容易使用的。

但是要把Redis的优势完全地发挥利用出来,还是需要好好研究一番的。

Redis也不是完美的,所以有必要了解避免踩坑的方法。

避其缺陷,扬其优势,方能为项目所用。

关于延迟分析的更多内容,可参考:https://redis.io/topics/latency

浅谈Redis延迟测试方法相关推荐

  1. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

  2. python文本框与数据库的关联_Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理...

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3. ...

  3. Redis设计与实现 -- 浅谈Redis持久化

    在讲解Redis持久化相关的话题之前,我们需要了解的是Redis为什么这么快?也就是Redis的IO模型 – 多路复用. 我们一句话概括为什么Redis这么快: Redis是单线程的,使用多路复用的I ...

  4. 浅谈Redis及其安装配置

    一.Redis的介绍 二.Redis的安装配置 三.Redis的配置文件说明 四.Redis的简单操作 简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型. ...

  5. 浅谈Redis与MySQL的耦合性以及利用管道完成MySQL到Redis的高效迁移

    ㈠ Redis 与 MySQL 的耦合性 在业务架构早期.我们便该"吃着碗里的看着锅里的".切莫让MySQL 有梦.而Redis 无心 毕竟.有些关系型的结构不适合放到Redis跑 ...

  6. 浅谈Redis和Hbase

    2019独角兽企业重金招聘Python工程师标准>>> 1,Java的Redis连接池代码 转载:https://blog.csdn.net/unix21/article/detai ...

  7. 浅谈redis数据库的键值设计

    丰富的数据结构使得redis的设计非常的有趣.不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与.redis的DBA需要熟悉 ...

  8. 浅谈Redis五种数据结构的底层原理

    概念 Redis作为一个开源的用C编写的非关系型数据库,基于优秀的CRUD效率,常用于软件系统的缓存,其本身提供了以下五种数据格式: string:字符串 list:列表 hash:散列表 set:无 ...

  9. 执行一次怎么会写入两次数据_浅谈 Redis 数据持久化之 AOF 模式

    我们知道 Redis 之所以读写快.性能高,得益于它是一种基于内存的数据库,毫无疑问它的操作都几乎都是基于内存.但是内存型数据库也有一个很大的弊端:如果进程崩溃或者服务重启的时候内存数据得不到保存,就 ...

  10. 浅谈 Redis 与 MySQL 的耦合性以及利用管道完成 MySQL 到 Redis 的高效迁移

    http://blog.csdn.net/dba_waterbin/article/details/8996872 ㈠ Redis 与 MySQL 的耦合性               在业务架构早期 ...

最新文章

  1. Nginx源码分析:核心模块剖析及常见问题
  2. 前端小知识点(9):函数和对象之间的关系
  3. [转]用Whois获得电信运营商的IP地址是如何分配的?
  4. 敏捷实践:比每日会议更疯狂的半日会议!
  5. c++ 传智课件_沪科版初中物理九年级全册第二节 科学探究:物质的比热容公开课优质课课件教案视频...
  6. 想了解APT与加密勒索软件?那这篇文章你绝不能错过……
  7. 震惊!Redis 的字符串居然是这样实现的…
  8. 在Clouda中使用jQuery Mobile问题解决方案
  9. OCCT示例学习笔记1--Viewer2d项目
  10. 裸辞计算机考研,一位工作三年,裸辞,跨考,347学姐的考研经验 - 考研 - 小木虫 - 学术 科研 互动社区...
  11. PS如何制作圆角矩形图片
  12. mac 下使用ssh
  13. win系统下设置小鹤双拼
  14. 哪种投影仪好用?家用电视投影仪哪种好
  15. Android运用手机多媒体
  16. 【Arduino和高中通用技术】——十一、BF1K-3AA系列电阻式压力应变片、HX711压力传感器和另一种按键去抖动方法
  17. 赛灵思 Xilinx UG908 - Vivado Design Suite 用户指南:编程和调试(中文版) (v2020.2)
  18. 帝国CMS仿hao123漫画网站模板动态版
  19. nlp中mask的意义及如何使用
  20. 运用CSS选择器、CSS文本相关样式及高级特性实现如图所示的宣传页面

热门文章

  1. 教父:花半分钟就看透事物本质的人,和花一辈子都看不清本质的人,注定是截然不同的命运...
  2. 代理模式(委托模式)— 结构型
  3. 企业微信企业邮箱设置,微信企业邮箱如何设置?
  4. web day2 作业
  5. 日记app(1.0)进展报告
  6. SCAR:Scalable Consensus Algorithm一种可伸缩共识算法
  7. iOS 防键盘遮挡
  8. 故事板(Storyboard)
  9. 年审是当月还是当天_年审年检7月当月审可以吗
  10. 仿百思不得其姐项目开发(粗略笔记,后期规范排版和更新)