Redis变慢?深入浅出Redis性能诊断系列文章(一)
mhr18 2024-10-23 11:35 27 浏览 0 评论
(本文首发于“数据库架构师”公号,订阅“数据库架构师”公号,一起学习数据库技术)
Redis 作为一款业内使用率最高的内存数据库,其拥有非常高的性能,单节点的QPS压测能达到18万以上。但也正因此如此,当应用访问 Redis 时,如果发现响应延迟变大时就会给业务带来非常大的影响。
比如在日常使用Redis时,肯定或多或少都遇到过下面这种问题:
- 为什么Redis服务过去一直很稳定,突然从今天某个时间点开始变慢了?
- 为什么访问Redis相同的命令,有时响应很快,有时却非常慢?
- 为什么访问Redis突然卡住了,过一会又自动恢复了,这也导致业务请求出现很多的毛刺?
- 。。。
如果不理解 Redis 的架构体系、核心功能的实现原理甚至一些命令的使用限制等,那么这种访问变慢问题的排查就会一头雾水,不知道从哪里下手才好。
本文基于多年使用和运维管理Redis的经验,详细梳理了可能引起Redis性能问题的原因并剖析对应的解决方案,也希望这一系列的文章能帮助大家更加合理的使用 Redis ,快速的定位并解决问题。
一、Redis访问架构链路分析
首先,在深入分析Redis服务前,需要弄清楚是不是真的Redis访问变慢了。
如果我们发现自己的应用服务响应延迟变长,我们首先要排查应用内部,确认是不是访问Redis路径变慢进而拖慢了整个服务的响应吞吐。
这里有两个比较关键的自查:
- 对于应用服务访问Redis的请求,记录下每次请求的响应延时(比如使用分布式链路跟踪系统等),看看是不是访问Redis响应时间变长了;
- 排查应用服务的多个节点,看看是不是每个节点都有问题,还是仅仅一个出现了问题。
这两个是后续深入分析Redis服务问题前的关键自查,事半功倍!
对于第一点从应用到Redis这条链路变慢的原因可能有如下两个:
- 应用到Redis服务之间的链路出现问题了,比如Redis所在服务器网络负载过高丢包、交换机问题、Proxy变慢等;
- Redis本身确实因为一些原因变慢了。
一般服务器层面都会有相关监控,网络的问题很容易就会发现,比如网卡打满、网卡降频【万兆降为千兆】等。
对于Redis访问链路的响应时间则可以做个模拟监控,如下Redis访问架构,应用程序经过域名系统、VIP系统,最后才到Redis所在的服务器,这种情况下则分别可以模拟 请求域名、请求VIP、请求直连Redis Server三条路径来评估响应时间是否确实变长了。
下面是另外一种Redis架构,访问路径又有不同,那么排查的方向也不会不同。
二、Redis性能基准测评
如果核查发现确实是请求Redis的服务响应耗时变长了,那么此刻就可以把问题分析的焦点放到Redis上了。
下面我们重点分析下Redis性能问题。
首先,需要对 Redis 进行基准的性能测试,了解我们的 Redis 服务在当前环境服务器上的基准性能。
什么是基准性能?
简单来讲,基准性能就是指在一台负载正常的服务器上,访问Redis的最大的响应延迟和平均响应延迟分别是怎样的?
为什么要测试基准性能?参考官方提供的响应延迟测试,来判断自己的 Redis服务是否变慢不行吗?
答案是不行的。
因为Redis 在不同的软硬件环境下,它的性能表现差别特别大,不同主频型号的CPU、不同的SSD硬盘,都会极大影响Redis的性能表现。服务器配置比较低时延迟为 10ms 时,才认为 Redis响应变慢了,但是如果配置比较高,那么可能延迟是 1ms 时就可以认为 Redis 变慢了。
所以,只有了解我们的 Redis 在生产环境服务器上的基准性能,才能进一步评估,当其延迟达到什么程度时,才认为 Redis 确实变慢了。
Redis自带的工具可以帮助我们完成这种测评,如下介绍两种基准性能测试的方式。
方式一:redis-cli --intrinsic-latency
为了避免业务测试服务器到 Redis 服务器之间的网络延迟,需要直接在 Redis 服务器上测试实例的响应延迟情况。执行以下命令,就可以测试出这个实例 120 秒内的最大响应延迟:
shell> redis-cli -h 127.0.0.1 -p 6379 --intrinsic-latency 120
Max latency so far: 4 microseconds.
Max latency so far: 5 microseconds.
Max latency so far: 15 microseconds.
Max latency so far: 23 microseconds.
Max latency so far: 64 microseconds.
Max latency so far: 196 microseconds.
Max latency so far: 245 microseconds.
Max latency so far: 246 microseconds.
Max latency so far: 254 microseconds.
Max latency so far: 259 microseconds.
29298480 total runs (avg latency: 4.0958 microseconds / 40957.76 nanoseconds per run).
Worst run took 63x longer than the average latency.
从输出结果可以看到,这 120 秒内的最大响应延迟为 259 微秒(0.259毫秒)。
方式二:redis-benchmark
Redis-benchmark是Redis官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能.
shell> redis-benchmark -h 127.0.0.1 -p 6379 -t set,get -c 500 -n 100000
====== SET ======
100000 requests completed in 1.02 seconds
500 parallel clients
3 bytes payload
keep alive: 1
0.00% <= 1 milliseconds
0.05% <= 2 milliseconds
99.09% <= 3 milliseconds
99.88% <= 4 milliseconds
100.00% <= 4 milliseconds
97847.36 requests per second
====== GET ======
100000 requests completed in 1.02 seconds
500 parallel clients
3 bytes payload
keep alive: 1
0.00% <= 1 milliseconds
0.05% <= 2 milliseconds
99.29% <= 3 milliseconds
99.92% <= 4 milliseconds
100.00% <= 4 milliseconds
97656.24 requests per second
该命令对set和get命令的操作响应时间进行测评,并发500个执行10w次操作,从输出结果可以看到,set的QPS达到了97847,响应时间都在4ms以内;get的QPS达到了97656,最大响应时间也在4ms以内;
了解了基准性能测试方法,那么我们就可以按照以下几步,来判断 Redis 是否真的变慢了:
- 在相同配置的服务器上,测试一个正常 Redis 实例的基准性能
- 找到可能变慢的 Redis 实例,测试这个实例的基准性能
- 对比这个实例的运行延迟与正常 Redis 基准性能,如果性能差距在两倍以上,就可以认为这个 Redis 服务确实响应变慢了
如果确认是 Redis服务变慢了,那如何排查是哪里发生了问题呢?后面的系列文章将从多个维度来一步步详细分析,欢迎关注。
如果这篇文章对你有帮助,还请帮忙点赞、转发 一下,你的支持会激励我输出更多高质量的文章,非常感谢!
如果你还想看更多优质文章,欢迎关注我的公号「数据库架构师」,提升数据库技能。
相关推荐
- jdk17安装和配置环境变量(jdk安装步骤环境变量配置)
-
简单介绍JDK17是Java的一个长期支持(LTS)版本,于2021年9月发布。作为LTS版本,它将获得Oracle的长期支持,这意味着会获得安全更新和错误修复,直到2...
- jdk8安装和配置环境变量(jdk8配置环境变量win10)
-
简单介绍JDK8是Java开发工具包的一个重大版本,于2014年3月发布。它引入了许多重要的新特性,极大地改进了Java编程的体验,并提高了代码的效率和可读性。总结JDK8是一...
- Java开发环境的准备流程!(java开发环境的准备流程有哪些)
-
准备开发环境工欲善其事,必先利其器。在学习本书的技术内容之前,应先将开发环境搭建好。本书所涉及的基础环境将在本章准备,包括JDK、IntelliJIDEA和Maven。如果读者对这些环境较为熟悉,可...
- skywalking-全链路跟踪(链路追踪sleuth)
-
一、概述1、skywalking简介SkyWalking是一款广受欢迎的国产APM(ApplicationPerformanceMonitoring,应用性能监控)产品,主要针对微服务、Clou...
- Oracle项目管理系统之成本状态跟踪
-
卷首语成本费用管理模块功能分为公司级、项目级两个层级,其中公司级功能包括概预算管理、概预算定额管理、预算模板管理,以及控制估算管理等功能。费用与成本成本费用管理主要是为了合理利用资金资源,控制企业的成...
- 从入门到精通,Java最全学习路线(java自学路线)
-
最近好多小伙伴询问,该如何学习java?那些视频适合零基础学习呢?大多数都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,在这给大家整理出一些学习路线。Java学习路线在这...
- SPARC M7最新技术 甲骨文首度在台发表
-
甲骨文首度在台发表SPARCM7最新技术,宣布推出全新SPARC系统產品系列,採用革命性的32内核、256执行绪SPARCM7微处理器。这套SPARC系统提供:先进的入侵防护和加密的Securit...
- 轻量化的企业级OLAP方案2(轻量化ar)
-
上一篇文章讲了一个轻量化的企业级OLAP方案,这一篇文章继续介绍另外一个方案。方案2:Greenplum1Greenplum介绍1.1Greenplum概念Greenplum数据库是一种基于Po...
- 时序数据库在水电站领域的应用(时序数据库优缺点)
-
大家好,上期经过了王宏志教授对数据库前沿领域的介绍,不知道小伙伴们是否对数据库领域有了更深的认识呢,本期让我们回归时序数据库,再来聊一聊时序数据库在水电站领域的应用。本文仅代表个人观点,如有偏颇之处,...
- 数据库SQL引擎比较(数据库引擎有哪些,有什么区别)
-
数据库SQL引擎的典型工作机制及详细分析如下,涵盖查询处理全流程中的核心机制与实际案例:一、SQL引擎核心处理流程1.解析与校验阶段词法/语法解析:SQL语句被拆解为Token序列,构建...
- Ubuntu系统密码(root密码)的修改方法
-
本文介绍在Linux系统的Ubuntu电脑中,修改账户用户密码(同时也修改了root用户密码)的方法。首先,如果此时处于登录页面(也就是意识到自己忘记密码的那个页面),就先点击右上角的关闭按钮...
- TablePlus:一个跨平台的数据库管理工具
-
TablePlus是一款现代化的跨平台(Window、Linux、macOS、iOS)数据库管理工具,提供直观的界面和强大的功能,可以帮助用户轻松管理和操作数据库。TablePlus免费版可以永久...
- 云满足用户对通过单一视图了解整体运营和数据的需求
-
ZD至顶网软件频道消息:云在简化IT和业务的同时也带来了新问题,这很有趣,不是吗?毫无疑问,云大幅降低了企业运行基础设施和应用的复杂性和成本;但您仍然面临一个老生常谈的问题——孤岛,只不过这次是在云...
- SQL_TOP(显示数据条数)(sqlserver显示查询的行数)
-
(8)SELECT(9)DISTINCT(11)<topNum><selectlist>(1)FROM[left_table](3)<join_type>...
- php搭建小型部门网站(php构建网站)
-
熟悉前端html,js,css,后端熟悉php,python,java只能称得上一般,还有很多坑待踩。鉴于所学很杂,决定利用对业务的熟悉来搞一个部门网站来简化大家的工作流程。初步设计方案后端用p...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)