基于Redis的大key的检测方法、系统、设备及存储介质
文献发布时间:2023-06-19 11:39:06
技术领域
本发明涉及账单自动生成领域,具体地说,涉及基于Redis的大key的检测方法、系统、设备及存储介质。
背景技术
Redis(Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis(是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set--有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis是一个高性能的key-value数据库。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
Redis中bigkey指的是Redis中key对应的value值很大。操作bigKey通常比较耗时,也就意味着阻塞Redis可能性越大。所以,就需要把bigKey提早检查出来,避免影响线上生产。Redis客户端自带有查询bigkey功能,会在线遍历服务器中全部key,遍历期间很消耗服务器资源,给生产环境造成性能影响,且客户端自带的bigkey检索每次只会检查出各种类型的最大key,无法查看更多Bigkey,不能满足生产环境bigkey检查需求。
因此,本发明提供了一种基于Redis的大key的检测方法、系统、设备及存储介质。
发明内容
针对现有技术中的问题,本发明的目的在于提供基于Redis的大key的检测方法、系统、设备及存储介质,克服了现有技术的困难,能够通过逻辑算法自动匹配Redis群集分片,可按照时间顺序进行优先检查,将数据存储于数据仓库保证数据安全性,定时推送邮件至相关owner或使用人员,实时了解Redis的bigkey(大key)状况,并进行相应调整,从而提高Redis的稳定性和提高工作效率。
本发明的实施例提供一种基于Redis的大key的检测方法,包括以下步骤:
S110、获得Redis群集中检索内存占有率大于第一预设阈值且负载低于第二预设阈值的Redis服务器的内存快照;
S120、对所述内存快照根据预设属性进行巡检,将巡检后的结果存放到性能数仓;
S130、跟踪所述性能数仓中的所有key,筛选所述key的阈值大于预设key所占容量的所述key,生成告警邮件。
优选地,在步骤S120中,通过预设key的前缀对所述内存快照中包含的key进行巡检,将满足预设key的前缀的key存放到性能数仓中。
优选地,在步骤S120中,通过预设key的后缀对所述内存快照中包含的key进行巡检,将满足预设key的后缀的key存放到性能数仓中。
优选地,在步骤S120中,通过预设key所占容量对所述内存快照中包含的key进行巡检,将大于预设key所占容量的key存放到性能数仓中。
优选地,在步骤S120中,将同时满足预设key的前缀、后缀以及大于预设key所占容量的key存放到性能数仓中。
优选地,所述步骤S130中,实时更新所述性能数仓。
优选地,所述预设key所占容量为所述预设key的字节数,所述步骤S130之后还包括步骤S140中,根据所述预设key的字节数拆分所述key为多个子key。
本发明的实施例还提供一种基于Redis的大key的检测系统,用于实现上述的基于Redis的大key的检测方法,所述基于Redis的大key的检测系统包括:
内存快照模块,获得Redis群集中检索内存占有率大于第一预设阈值且负载低于第二预设阈值的Redis服务器的内存快照;
性能数仓模块,对所述内存快照根据预设属性进行巡检,将巡检后的结果存放到性能数仓;
监控告警模块,跟踪所述性能数仓中的所有key,筛选所述key的阈值大于预设key所占容量的所述key,生成告警邮件。
优选地,还包括key更新模块,根据所述预设key的字节数拆分所述key为多个子key。
本发明的实施例还提供一种基于Redis的大key的检测设备,包括:
处理器;
存储器,其中存储有所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行上述基于Redis的大key的检测方法的步骤。
本发明的实施例还提供一种计算机可读存储介质,用于存储程序,所述程序被执行时实现上述基于Redis的大key的检测方法的步骤。
本发明的目的在于提供基于Redis的大key的检测方法、系统、设备及存储介质,能够通过逻辑算法自动匹配Redis群集分片,可按照时间顺序进行优先检查,将数据存储于数据仓库保证数据安全性,定时推送邮件至相关owner或使用人员,实时了解Redis的bigkey(大key)状况,并进行相应调整,从而提高Redis的稳定性和提高工作效率。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显。
图1是本发明的基于Redis的大key的检测方法的流程图。
图2是本发明的基于Redis的大key的检测方法的实施过程示意图。
图3是本发明的基于Redis的大key的检测系统的模块示意图。
图4是本发明的基于Redis的大key的检测设备的结构示意图。
图5是本发明一实施例的计算机可读存储介质的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的实施方式。相反,提供这些实施方式使得本发明将全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的结构,因而将省略对它们的重复描述。
图1是本发明的基于Redis的大key的检测方法的流程图。如图1所示,本发明的实施例提供一种基于Redis的大key的检测方法,包括以下步骤:
S110、获得Redis群集中检索内存占有率大于第一预设阈值且负载低于第二预设阈值的Redis服务器的内存快照;
S120、对内存快照根据预设属性进行巡检,将巡检后的结果存放到性能数仓;
S130、跟踪性能数仓中的所有key,筛选所占容量大于预设key所占容量阈值的key,生成告警邮件,预设key所占容量为预设key的字节数。
S140、根据预设key的字节数拆分key为多个子key。
本发明的目的在于提出一种对线上业务无影响的bigkey检查方法,并一次性全量捕获Redis的bigkey。本发明针对需要bigkey检查的Redis群集,制定一个检查流程。对群集中的内存占有率高并且负载低的Redis实例,拉取一个内存快照。拉取快照会派生出子进程操作,降低了对服务器性能影响。在控制服务器负载的情况下,对内存快照进行检索分析,可以指定key前后缀和key大小进行按需巡检,并将巡检后的结果存放到性能数仓,根据指定的阈值,定时发送告警邮件,推动bigkey的整改。
在一个优选实施例中,在步骤S120中,通过预设key的前缀对内存快照中包含的key进行巡检,将满足预设key的前缀的key存放到性能数仓中,但不以此为限。
在一个优选实施例中,在步骤S120中,通过预设key的后缀对内存快照中包含的key进行巡检,将满足预设key的后缀的key存放到性能数仓中,但不以此为限。
在一个优选实施例中,在步骤S120中,通过预设key所占容量对内存快照中包含的key进行巡检,将大于预设key所占容量的key存放到性能数仓中,但不以此为限。
在一个优选实施例中,在步骤S120中,将同时满足预设key的前缀、后缀以及大于预设key所占容量的key存放到性能数仓中,但不以此为限。
在一个优选实施例中,步骤S130中,实时更新性能数仓,但不以此为限。
本发明的基于Redis的大key的检测方法能够通过逻辑算法自动匹配Redis群集分片,可按照时间顺序进行优先检查,将数据存储于数据仓库保证数据安全性,定时推送邮件至相关owner或使用人员,实时了解Redis的bigkey状况,并进行相应调整,从而提高Redis的稳定性和提高工作效率。
参见图1和2,本发明的实施过程如下:自生产集群获取生产全量数据并更新新上群集时间信息。根据生产群集获取对应实例信息。
获取实例rdb信息,通过逻辑算法获取大key。
将结果memoryprofile存储在数据仓库中。通过指定告警方式通过告警平台发送告警。
其中,告警条件包括:
1.每个群集选最大的一组进行分析
2.Key对应的value其大小超过50M
以一个被告警的key为例,
Redis大Key隐患很多(程序超时/网络堵塞/QPS下降/Redis切换等),为了消除隐患减少事故,如下是群集超大key巡检结果,请尽快拆分优化。群集名:demo_Redis
参见商标,key【SUB2021040505】的大小(52.94M)超过了预设阈值50M,容易堵塞Redis,所以,key【SUB2021040505】被通过告警平台发送告警。后续对key【SUB2021040505】进行拆分,减小其所占容量,保证服务器的安全很顺畅运行。
图3是本发明的基于Redis的大key的检测系统的模块示意图。如图3所示,本发明的基于Redis的大key的检测系统5包括:
内存快照模块,获得Redis群集中检索内存占有率大于第一预设阈值且负载低于第二预设阈值的Redis服务器的内存快照。
性能数仓模块,对内存快照根据预设属性进行巡检,将巡检后的结果存放到性能数仓。
监控告警模块,跟踪性能数仓中的所有key,筛选所占容量大于预设key所占容量阈值的key,生成告警邮件。
key更新模块,根据预设key的字节数拆分key为多个子key。
本发明的基于Redis的大key的检测系统能够通过逻辑算法自动匹配Redis群集分片,可按照时间顺序进行优先检查,将数据存储于数据仓库保证数据安全性,定时推送邮件至相关owner或使用人员,实时了解Redis的bigkey状况,并进行相应调整,从而提高Redis的稳定性和提高工作效率。
本发明实施例还提供一种基于Redis的大key的检测设备,包括处理器。存储器,其中存储有处理器的可执行指令。其中,处理器配置为经由执行可执行指令来执行的基于Redis的大key的检测方法的步骤。
如上所示,该实施例本发明的基于Redis的大key的检测系统能够通过逻辑算法自动匹配Redis群集分片,可按照时间顺序进行优先检查,将数据存储于数据仓库保证数据安全性,定时推送邮件至相关owner或使用人员,实时了解Redis的bigkey状况,并进行相应调整,从而提高Redis的稳定性和提高工作效率。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“平台”。
图4是本发明的基于Redis的大key的检测设备的结构示意图。下面参照图4来描述根据本发明的这种实施方式的电子设备600。图4显示的电子设备600仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图4所示,电子设备600以通用计算设备的形式表现。电子设备600的组件可以包括但不限于:至少一个处理单元610、至少一个存储单元620、连接不同平台组件(包括存储单元620和处理单元610)的总线630、显示单元640等。
其中,存储单元存储有程序代码,程序代码可以被处理单元610执行,使得处理单元610执行本说明书上述电子处方流转处理方法部分中描述的根据本发明各种示例性实施方式的步骤。例如,处理单元610可以执行如图1中所示的步骤。
存储单元620可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)6201和/或高速缓存存储单元6202,还可以进一步包括只读存储单元(ROM)6203。
存储单元620还可以包括具有一组(至少一个)程序模块6205的程序/实用工具6204,这样的程序模块6205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线630可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备600也可以与一个或多个外部设备700(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备600交互的设备通信,和/或与使得该电子设备600能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口650进行。并且,电子设备600还可以通过网络适配器660与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。网络适配器660可以通过总线630与电子设备600的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备600使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储平台等。
本发明实施例还提供一种计算机可读存储介质,用于存储程序,程序被执行时实现的基于Redis的大key的检测方法的步骤。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述电子处方流转处理方法部分中描述的根据本发明各种示例性实施方式的步骤。
如上所示,该实施例本发明的基于Redis的大key的检测系统能够通过逻辑算法自动匹配Redis群集分片,可按照时间顺序进行优先检查,将数据存储于数据仓库保证数据安全性,定时推送邮件至相关owner或使用人员,实时了解Redis的bigkey状况,并进行相应调整,从而提高Redis的稳定性和提高工作效率。
图5是本发明的计算机可读存储介质的结构示意图。参考图5所示,描述了根据本发明的实施方式的用于实现上述方法的程序产品800,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
综上,本发明的目的在于提供基于Redis的大key的检测方法、系统、设备及存储介质,能够通过逻辑算法自动匹配Redis群集分片,可按照时间顺序进行优先检查,将数据存储于数据仓库保证数据安全性,定时推送邮件至相关owner或使用人员,实时了解Redis的bigkey状况,并进行相应调整,从而提高Redis的稳定性和提高工作效率。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
- 基于Redis的大key的检测方法、系统、设备及存储介质
- 基于Ukey机柜的Ukey信息获取方法、装置、设备和存储介质