一种Redis客户端性能监测方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种Redis客户端性能监测方法及装置。
背景技术
Redis既是一个使用C语言编写的开源高性能Key-Value数据库,也是一个可支持网络、可基于内存、支持持久化NOSQL数据库。
业务系统访问Redis缓存的响应时间,一方面取决于Redis服务本身的性能,另一方面也取决于业务系统与Redis服务之间的性能。当访问Redis缓存的响应时间变长甚至响应超时,可能是Redis服务端性能变差,比如出现慢查询、数据淘汰、连接数增加等,也可能是因为业务系统与Redis服务之间的网络变差。
当访问Redis服务出现问题时,很难直接定位到具体原因,需要通过Redis的监控所提供的信息进行分析才能得到答案。为了能够快速查看访问Redis的性能以及出现问题时快速定位,不仅关注Redis服务本身的性能,同样关注能够更直观展示业务访问缓存的客户端性能,比如tp999、tp90等性能数据。
Redis服务本身的性能可以通过Redis提供的info命令的输出来获取相关性能指标,或者通过Redis提供的monitor命令来获取业务对Redis服务的访问压力。
Redis客户端表现出的响应时间则包含Redis服务端执行命令的时间和客户端与服务端的网络交互往返时间,无法通过直接的Redis命令进行获取。
现有技术均是从Redis服务端的性能指标对Redis进行监控,只能监控Redis服务的运行情况,无法直观的展示一个业务系统访问缓存的性能。当业务出现性能问题时,不能直观发现出现问题的客户端,以及每个具体客户端的访问性能,无法准确对问题进行定位。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本申请实施例提供了一种Redis客户端性能监测方法及装置。
第一方面,本申请实施例提供了一种Redis客户端性能监测方法,包括:
获取预设时间段内Redis客户端调用命令的命令耗时;
在用于保存命令数量的矩阵中,增加所述命令耗时对应矩阵元素的命令数量;
根据所述矩阵确定所述Redis客户端的第一性能指标。
可选的,所述方法还包括:
初始化m×n的所述矩阵,其中,m、n为预设的大于0的整数,所述矩阵元素(x,y)对应的命令耗时为nx+y,x取值范围为[0,m-1],y取值范围为[0,n-1]。
可选的,所述方法还包括:
统计所述预设时间段内的第二性能指标,所述第二性能指标包括以下至少一项指标:命令成功数量、命令错误数量和重定向数量。
可选的,所述在用于保存命令数量的矩阵中,增加所述命令耗时对应矩阵元素的命令数量,包括:
确定所述命令耗时对应的矩阵元素,t表示所述命令耗时,t对应的矩阵元素为
可选的,所述根据所述矩阵确定所述Redis客户端的第一性能指标,包括:
根据所述矩阵中每个矩阵元素对应的命令数量及命令耗时计算第一性能指标,所述第一性能指标包括:完成预设百分比的命令所需的最低耗时。
可选的,所述根据所述矩阵中每个矩阵元素对应的命令数量及命令耗时计算第一性能指标,包括:
获取所述预设时间段内的命令成功数量;
根据所述命令成功数量计算所述第一性能指标对应的完成命令数量;
从所述矩阵第一行第一列开始依次累加所述矩阵元素的命令数量;
当累加到第一矩阵元素的命令数量达到所述完成命令数量时,确定所述第一矩阵元素对应的命令耗时为所述第一性能指标的最低耗时。
可选的,所述方法还包括:
将所述第一性能指标和/或第二性能指标保存到预设存储空间;
在可视化平台上展示所述第一性能指标和/或第二性能指标。
第二方面,本申请实施例提供了一种Redis客户端性能监测装置,包括:
获取模块,用于获取预设时间段内Redis客户端调用命令的命令耗时;
记录模块,用于在用于保存命令数量的矩阵中,增加所述命令耗时对应矩阵元素的命令数量;
确定模块,用于根据所述矩阵确定所述Redis客户端的第一性能指标。
第三方面,本申请实施例提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行计算机程序时,实现上述方法步骤。
第四方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法步骤。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:
以矩阵方式记录Redis客户端不同命令耗时的命令数量,可以方便快速地通过矩阵计算性能指标,从而实现对Redis客户端的性能进行监测。当业务出现性能问题时,可以快速地发现出现问题的客户端,以及各个客户端的性能,准确定位性能问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种Redis客户端性能监测方法的流程图;
图2为本申请另一实施例提供的一种Redis客户端性能监测方法的流程图;
图3为本申请实施例提供的可视化平台的界面示意图;
图4为本申请实施例提供的一种Redis客户端性能监测装置的框图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例,在基于Jedis实现的Redis客户端中,通过矩阵记录不同命令耗时的命令数量,从而实现对Redis客户端的性能进行监测。
下面首先对本发明实施例所提供的一种Redis客户端性能监测方法进行介绍。
图1为本申请实施例提供的一种Redis客户端性能监测方法的流程图。如图1所示,该方法包括以下步骤:
步骤S11,获取预设时间段内Redis客户端调用命令的命令耗时。
对于Redis客户端,从命令调用开始到命令完成,计算完成该命令的耗时。
例如,可以统计1分钟内Redis客户端调用的每个命令的命令耗时。
步骤S12,在用于保存命令数量的矩阵中,增加命令耗时对应矩阵元素的命令数量。
为了记录不同命令耗时的命令数量,构建一个矩阵,该矩阵中每个元素均对应一个时间,而该矩阵元素则表示命令耗时等于该时间的命令数量。根据每个命令的命令耗时,增加矩阵中相应元素的计数。
步骤S13,根据矩阵确定Redis客户端的第一性能指标。
通过该矩阵,可以获得预设时间段内不同命令耗时对应的命令数量,因此,可以统计出该Redis客户端的tp999、tp99、tp90、tp50等性能指标。
本实施例中,以矩阵方式记录Redis客户端不同命令耗时的命令数量,可以方便快速地通过矩阵计算性能指标,从而实现对Redis客户端的性能进行监测。当业务出现性能问题时,可以快速地发现出现问题的客户端,以及各个客户端的性能,准确定位性能问题。
可选的,该方法还包括:初始化m×n的矩阵,其中,m、n为预设的大于0的整数,矩阵元素表示相同命令耗时的命令数量,矩阵元素(x,y)对应的命令耗时为nx+y,x取值范围为[0,m-1],y取值范围为[0,n-1]。
其中,m和n可以相等,如均为256,即使用正方形矩阵进行命令计数;m和n也可以不相等,如m=256,n=128,即使用长方形矩阵进行命令计数。
下面以256×256矩阵为例进行说明。
该矩阵中每个矩阵元素对应的命令耗时单位为毫秒(ms)。第一行矩阵元素对应的命令耗时为0~255ms,第二行矩阵元素对应的命令耗时为256~511ms,以此类推,矩阵元素(x,y)对应的命令耗时为256x+y。x和y的取值范围均为[0,255]。
本实施例中,可以在每个预设时间段生成一个矩阵,如每分钟生成一个矩阵,该矩阵中记录一分钟内Redis客户端不同命令耗时的命令数量。通过该矩阵,可以统计出Redis客户端在这一分钟内的tp999、tp99、tp90、tp50、最大命令耗时、最小命令耗时、平均命令耗时等性能指标。
如下所示的矩阵中,矩阵元素(0,0)对应的命令耗时为0ms,命令数量为10;矩阵元素(0,1)对应的命令耗时为1ms,命令数量为8;矩阵元素(1,1)对应的命令耗时为257ms,命令数量为1。
由于该矩阵中,数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律,该矩阵为稀疏矩阵。
可选的,步骤S12包括:确定命令耗时对应的矩阵元素,t表示命令耗时,t对应的矩阵元素为
增加矩阵元素
的命令数量。
以如上矩阵为例,命令耗时为258ms,则
y=tmodn=258mod256=2,对应的矩阵元素(1,2),即如上矩阵中第二行第三列的矩阵元素对应的命令耗时为258ms,因此,将该矩阵元素加1。
可选的,上述步骤S13包括:根据矩阵中每个矩阵元素对应的命令数量及命令耗时计算第一性能指标。其中,第一性能指标包括:完成预设百分比的命令所需的最低耗时。
例如,可以计算每分钟内Redis客户端的tp999、tp99、tp90、tp50等性能指标。
可选的,第一性能指标还包括以下至少一项指标:最大命令耗时、最小命令耗时、平均命令耗时等等。
本实施例中,通过矩阵记录不同命令耗时的命令数量,从而可以方便快速地统计出一定时间段内Redis客户端的性能指标。
图2为本申请另一实施例提供的一种Redis客户端性能监测方法的流程图。如图2所示,根据矩阵中每个矩阵元素对应的命令数量及命令耗时计算第一性能指标,包括:
步骤S21,获取预设时间段内的命令成功数量。
例如,根据如上矩阵,1分钟内命令成功数量为10+8+5+1=24。
步骤S22,根据命令成功数量计算第一性能指标对应的完成命令数量。
例如,当第一性能指标为tp50时,对应的完成命令数量为24×50%=12。当第一性能指标为tp90时,对应的完成命令数量为24×90%≈21。当第一性能指标为tp99时,对应的完成命令数量为24×99%≈23。当第一性能指标为tp999时,对应的完成命令数量为24×99.9%≈24。
步骤S23,从矩阵第一行第一列开始依次累加矩阵元素的命令数量。
例如,如上矩阵,从矩阵元素(0,0)开始累加命令数量,按顺序遍历所有矩阵元素,直到矩阵元素(255,255)。
命令耗时0ms的命令数量为10,命令耗时1ms的命令数量为8,命令耗时2ms的命令数量为5,命令耗时257ms的命令数量为1,……。
步骤S24,当累加到第一矩阵元素的命令数量达到完成命令数量时,确定第一矩阵元素对应的命令耗时为第一性能指标的最低耗时。
例如,对于tp50,从矩阵元素(0,0)开始,累加到矩阵元素(0,1),命令数量就达到12(10+8>12),则tp50=1ms。同理,tp90=2ms,tp99=2ms,tp999=257ms。
这样,通过上述依次累加的方式计算性能指标,更加快速高效,且内存消耗较小。
在可选实施例中,该方法还包括:统计预设时间段内的第二性能指标,第二性能指标包括以下至少一项指标:命令成功数量、命令错误数量和重定向数量。
Redis客户端后台线程服务在每个预设时间段,如每分钟统计上述第一性能指标和/或第二性能指标,同时清空矩阵以及第二性能指标的计数,开启新一分钟的计数。
在可选实施例中,对于Redis客户端在预设时间段内的性能指标,可进行保存和展示。该方法还包括:将第一性能指标和/或第二性能指标保存到预设存储空间;在可视化平台上展示第一性能指标和/或第二性能指标。
例如,对于每分钟得到的tp999、tp99、tp90、tp50、最大命令耗时、最小命令耗时、命令成功数量、命令错误数量和重定向数量,保存至缓存器或其他文件存储系统,然后,在可视化平台上进行展示。如图3所示,显示某一Redis客户端每分钟的性能指标。这样,可以直观地展示每个Redis客户端的性能,便于工作人员快速定位、排查性能问题。
可选的,在该可视化平台上,还提供对查询功能,即工作人员可以通过输入Redis客户端的IP地址、时间范围等信息,查询该Redis客户端在该时间范围内的性能指标。
对于Redis客户端出现的异常情况,可以在可视化平台上突出显示,例如,图3中,时间2019-11-16 17:25:16的最大命令耗时为370ms,远大于其他时间的最大命令耗时,出现性能异常,则可对其突出显示,从而便于工作人员快速定位、排查性能问题。
可选的,本实施例中的可视化平台可以采用Dashboard(business intelligencedashboard,商业智能仪表盘),Dashboard是实现数据可视化的模块,用于展示度量信息和关键业务指标(KPI)等的数据虚拟化工具。Dashboard可以从多种数据源获取实时数据,并且是定制化的交互式界面,其丰富的,可交互的可视化界面为数据提供更好的使用体验。
下述为本申请装置实施例,可以用于执行本申请方法实施例。
图4为本申请实施例提供的一种Redis客户端性能监测装置的框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。如图4所示,该Redis客户端性能监测装置包括:
获取模块41,用于获取预设时间段内Redis客户端调用命令的命令耗时;
记录模块42,用于在用于保存命令数量的矩阵中,增加命令耗时对应矩阵元素的命令数量;
确定模块43,用于根据矩阵确定Redis客户端的第一性能指标。
本申请实施例还提供一种电子设备,如图5所示,电子设备可以包括:处理器1501、通信接口1502、存储器1503和通信总线1504,其中,处理器1501,通信接口1502,存储器1503通过通信总线1504完成相互间的通信。
存储器1503,用于存放计算机程序;
处理器1501,用于执行存储器1503上所存放的计算机程序时,实现以下上述方法实施例的步骤。
上述电子设备提到的通信总线可以是外设部件互连标准(PeripheralComponentInterconnect,P C I)总线或扩展工业标准结构(Extended IndustryStandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本申请还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以下上述方法实施例的步骤。
需要说明的是,对于上述装置、电子设备及计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
进一步需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。