掌桥专利:专业的专利平台
掌桥专利
首页

热Key数据并发响应方法、装置、设备及存储介质

文献发布时间:2023-06-19 11:16:08


热Key数据并发响应方法、装置、设备及存储介质

技术领域

本申请涉及互联网领域,具体而言,本申请涉及一种热Key数据并发响应方法、装置、设备及存储介质。

背景技术

随着互联网行业的高速发展,网站数据缓存已成为网站的一个关键性支撑技术。例如在网站页面中,尤其是作为全局数据,如hotkey(热Key)数据会在大多数页面都会很用到。这些热Key数据往往采用Redis集群来进行存储。Redis集群是一个分布式(distributed)、容错(fault-tolerant)的Redis实现,集群可以使用的功能是普通单机Redis所能使用的功能的一个子集(subset)。

在主站页面中,在高峰时期,大量的用户集中访问这些页面,使得这些页面的QPS(Query Per Second,每秒查询率)升高,大量的并发请求落在Redis集群中的节点上,容易使得热Key的并发需求超过了Redis节点的并发能力,Redis集群无法处理而拒绝请求,使得前端页面无法获取到数据,使得页面出现故障;为了解决上述困难,常用技术中,往往是将Redis集群的热Key数据分配到节点去响应,但对于一个热Key数据而言,其只会分配到Redis集群的某个节点上,对于单个热Key数据而言,其并发响应能力依然是Redis的单个节点的并发能力,无法彻底解决Redis集群并发处理能力低的问题。

发明内容

本申请的目的旨在至少解决上述技术缺陷之一,特别是热Key数据的并发响应能力低的问题,提供一种热Key数据并发响应方法、装置、设备及存储介质。

第一方面,本申请实施例提供一种热Key数据并发响应方法,包括以下步骤:

接收请求方发送的热Key数据读取请求,根据所述热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key;

根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点;

接收所述目标节点响应所述热Key数据读取请求读取到的目标热Key数据,将所述目标热Key数据返回请求方。

在一实施例中,所述根据所述热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key的步骤包括:

根据所述热Key数据读取请求确定热Key对应的热Key标识;

根据所述热Key标识查找该热Key在Redis集群中对应的至少两个节点Key;

按照预设的随机算法从所述至少两个节点Key中选择目标节点Key。

在一实施例中,所述根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点的步骤之前,还包括:

判断随机选择的目标节点Key对应的目标节点是否存储有热Key数据;

若存在,执行根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点的步骤。

在一实施例中,该热Key数据并发响应方法,还包括:

若不存在,从数据服务获取所述热key对应的热Key数据,将所述热Key数据写入到Redis集群的所有节点上;

将从所述数据服务获取到的所述热Key数据返回至所述请求方。

在一实施例中,所述按照预设的随机算法从所述至少两个节点Key中选择目标节点Key的步骤包括:

从预先设置的随机数集合中选择任一随机数;

根据所选择的随机数从所述至少两个节点Key查询与所述随机数相匹配的节点标识,将与所述随机数相匹配的节点标识对应的节点Key作为目标节点Key。

在一实施例中,所述从预先设置的随机数集合中选择任一随机数的步骤包括:

确定所述热Key对应的节点Key的节点数量;

根据所述节点数量确定若干个随机数,得到随机数集合,其中,所述随机数与所述节点Key的节点标识一一对应;其中,所述节点标识用于标识所述节点Key所在的Redis缓存集群的集群节点序号。

在一实施例中,所述根据所述热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key的步骤之前,还包括:

根据所述热Key标识生成热Key对应的至少两个节点Key,并在所述节点Key的预设位置上添加节点标识;其中,所述节点标识用于标识所述节点Key所在的Redis集群的节点位置;

建立所述节点Key与所述Redis集群上的节点之间的映射关系。

在一实施例中,所述根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点的步骤包括:

根据节点Key与Redis集群上的节点之间的映射关系以及所述目标节点Key的节点标识,确定所述目标节点Key在Redis集群中的目标节点;

将所述热Key数据读取请求发送到所述目标节点,以通过所述目标节点响应所述热Key数据读取请求。

第二方面,本申请实施例提供一种热Key数据并发响应装置,包括:

节点Key选择模块,用于接收请求方发送的热Key数据读取请求,根据所述热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key;

读取请求映射模块,用于根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点;

热Key数据返回模块,用于接收所述目标节点响应所述热Key数据读取请求读取到的目标热Key数据,将所述目标热Key数据返回请求方。

第三方面,本申请实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面任意实施例所提及的热Key数据并发响应方法。

第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现第一方面任意实施例所提及的热Key数据并发响应方法。

上述实施例提供的热Key数据并发响应方法、装置、设备及存储介质,通过接收请求方发送的热Key数据读取请求,根据热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key;根据目标节点Key的节点标识将热Key数据读取请求映射到目标节点Key对应的目标节点;接收目标节点响应热Key数据读取请求读取到的目标热Key数据,将目标热Key数据返回请求方,提高了热Key数据的并发响应能力。

在本技术方案中,将热Key数据写入到Redis集群的至少两个节点,如可以Redis集群的所有的节点中,当发生对热Key数据的大量并发请求时,将热Key数据读取请求发送到热Key对应的多个节点Key对应的Redis集群节点上,利用该节点Key对应的目标节点对热Key数据读取请求进行响应,通过该目标节点获取请求方请求读取的该热Key的目标热Key数据,将该目标热Key数据返回给请求方,提高了热Key数据的并发响应能力。相对于现有技术中从单一的热Key上获取热Key数据,本技术方案利用根据所述热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key,通过该目标节点Key对应的目标节点向请求方返回热Key数据,大大降低了热Key对应的节点Key的并发处理压力,同时将热Key的并发能力处理提高了N倍,其中N为写入热Key数据的Redis集群的节点数量。

本申请附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本申请的实践了解到。

附图说明

本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1是本申请实施例提供的适用于热Key数据并发响应的场景的环境示意图;

图2是本申请实施例提供的热Key数据并发响应方法的流程图;

图3是主动写入状态下的热Key数据并发响应过程的原理图;

图4是被动写入状态下的热Key数据并发响应过程的原理图;

图5是本申请实施例提供的一种热Key数据并发响应装置的结构示意图;

图6是本申请实施例提供的一种电子设备的结构示意图。

具体实施方式

下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本申请所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。

集群数据库系统是指将一组数据库服务器以集群的方式组合起来,使用统一的接口向用户提供服务。在生产实践中,利用集群数据库系统来提供数据存储。在一些应用场景下,在网站页面中,尤其是作为全局数据,如hotkey(热Key)数据会在大多数页面都会很用到;这些热Key数据往往采用Redis集群来进行存储。Redis集群是一个分布式(distributed)、容错(fault-tolerant)的Redis实现,集群可以使用的功能是普通单机Redis所能使用的功能的一个子集(subset)。

在主站页面中,在高峰时期,大量的用户集中访问这些页面,使得这些页面的QPS(Query Per Second,每秒查询率)升高,大量的并发请求落在Redis集群中的节点上,容易使得热Key的并发需求超过了Redis节点的并发能力,Redis集群会处理不过来,从而拒绝请求,使得前端页面无法获取到数据,使得页面出现故障。在相关技术中,用户往往向某一热Key请求热Key数据,导致该热Key的并发需求大于该Redis节点的并发能力,例如,QPS达到了10万以上,即热Key的并发需求达到10万以上,而Redis节点的并发能力的最高限制为10万,导致Redis集群会处理不过来,从而拒绝请求。

本申请提供的热Key数据并发响应方法、装置、设备及存储介质,旨在解决现有技术的如上技术问题。

下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。

在对本申请实施例进行详细的解释说明之前,先对本申请实施例的应用场景予以介绍。本申请实施例提供的方法应用于基于Redis集群的热Key数据并发响应的场景中。

请参考图1,图1是本申请实施例提供的适用于热Key数据并发响应的场景的环境示意图,如图1所示,请求方101向服务端102发送热Key数据读取请求,以读取热Key对应的热Key数据,如大多数网页均会使用到的全局数据,服务端102可以从缓存服务中的热Key对应的Redis集群上的节点缓存的热Key数据进行读取,并返回至请求方。在本技术方案中,请求方101可以是观众用户和主播用户等一方,服务端102可以包括缓存服务、数据服务和推送服务等。其中,数据服务可以理解为数据源,其中存储有各种业务的源数据,缓存服务用户缓存各种业务数据,包括热Key数据,推送服务用于将数据进行推送,包括热Key数据的写入等。

下面将结合附图,对本申请的实施例进行详细描述。

图2是本申请实施例提供的热Key数据并发响应方法的流程图,该热Key数据并发响应方法可以执行于服务端。

具体的,如图2所示,该热Key数据并发响应方法可以包括以下步骤:

S210、接收请求方发送的热Key数据读取请求,根据所述热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key。

对于热key,在缓存服务中代指同一时间接收多个并发请求的Key,称之为热Key,可以命名为hotkey。在本实施例中,热Key对应有至少两个节点Key,每个节点Key的值(value)是一致的,热Key的值是不存在的,当确定了目标节点Key后,热点Key的值被目标节点Key所代替,而每个节点Key的数据是一致的,且有效时间也相同,每个节点Key是冗余数据,

具体的,请求方服务器发送热Key数据读取请求,以读取缓存在Redis集群上的热Key对应的热Key数据。在本实施例中,热Key对应有至少两个节点Key,每个节点Key对应有唯一的节点标识,每个节点Key可以分布在Redis集群的不同节点上。通过节点Key的节点标识可以查询得到该节点Key在Redis集群上的节点位置。进一步的,当接收到热Key数据读取请求从热Key对应的至少两个节点Key中选择目标节点Key,可以是从至少两个节点Key中随机选择目标节点Key。

在一实施例中,步骤S210中的根据所述热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key,可以包括以下步骤:

S2101、根据所述热Key数据读取请求确定热Key对应的热Key标识。

其中,热Key数据读取请求携带有该热Key数据对应的热Key标识。

当接收到请求方发送的热Key数据读取请求,对该热Key数据读取请求进行解析,确定该热Key数据所对应热Key的热Key标识。

S2102、根据所述热Key标识查找该热Key在Redis集群中对应的至少两个节点Key。

每个热Key与其对应的至少两个节点Key具有映射关系,其中,节点Key具有节点标识,可以用hotkey_node_n来表示。

例如,热Key的热Key标识为hotkey,则该热Key对应的至少两个节点Key的节点标识可以标识为hotkey_node_n,hotkey表示热Key标识,node表示该热Key所对应的节点Key在Redis集群的节点位置,n表示该热Key所对应的节点Key的序号及其所在Redis集群的节点位置。例如,热Key(hotkey1)对应的第一个节点Key的节点标识为hotkey1_node100_1,第二个节点Key的节点标识为hotkey1_node200_2,第三个节点Key的节点标识为hotkey1_node300_3;

通过该热Key的热Key标识可以查找到该热Key在Redis集群中对应的至少两个节点Key。由于在Redis集群中的节点可以包括多个节点Key,每个节点Key分布在一个节点上,进一步的,根据节点Key的节点标识可以确定该节点Key所在的Redis集群的位置。例如,hotkey1_node200_2可以表示该节点标识对应的节点Key在Redis集群的第二个节点上。

S2103、按照预设的随机算法从所述至少两个节点Key中选择目标节点Key。

具体的,在本实施例中,通过读取的热Key和随机数经过预设的随机算法进行计算处理,根据计算处理得到的结果确定目标节点,其中随机算法包括但不限于数值概率算法、拉斯维加斯算法(LasVegas)、蒙特卡罗算法(MonteCarlo)、舍伍德算法(Sherwood)和MT算法等,上述实例的随机算法均属于现有算法,故不再此对其进行详细赘述。

例如,不同的节点Key可以用hotkey_node_n;n表示节点Key的序号,经过读取的热Key和随机数经过预设的随机算法进行计算处理,根据计算处理得到的结果n=2,而n=2表示第二个节点Key,则将第二个节点Key作为目标节点Key。

S220、根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点。

在本实施例中,由于热Key不存在值(value),也即热Key不缓存有热Key数据,因此,根据随机选择出来的目标节点Key的节点标识将热Key数据请求映射到目标节点Key对应的目标节点。

节点标识包括该节点Key所对应的热Key、该节点Key所在节点位置以及节点Key序号等信息。例如,节点标识为hotkey_node_n,通过“hotkey”可以确定节点Key所对应的热Key,“node”可以确定该节点Key所在节点位置,以及“n”可以确定节点Key的序号,如热Key有三个节点key,n可以取值1、2和3,分别表示热Key的第一个节点Key、第二个节点Key和第三个节点Key。

在本实施例中,根据目标节点Key的节点标识,对该节点标识“hotkey_node_n”进行解析处理,从节点标识中得到该节点Key所在Redis集群的节点位置,即根据节点标识中的“node”处的具体内容确定该目标节点Key在Redis集群上的节点位置,从而确定该目标节点Key在Redis集群中的目标节点。

将热Key数据读取请求发送到Redis集群的目标节点上,以通过该目标节点响应该热Key数据读取请求。其中,目标节点上缓存有该热Key的热Key数据。

S230、接收所述目标节点响应所述热Key数据读取请求读取到的目标热Key数据,将所述目标热Key数据返回请求方。

目标节点根据热Key数据读取请求做出响应,获取该热Key的目标热Key数据,并发送给服务端,以通过服务端从缓存服务接收该目标热Key数据,并将目标热Key数据返回请求方。

在本技术方案中,将热Key数据写入到Redis集群的至少两个节点,如可3个节点,或者Redis集群的所有的节点中,当发生对热Key数据的大量并发请求时,将热Key数据读取请求发送到热Key对应的多个节点Key中,利用该节点Key对应的目标节点对热Key数据读取请求进行响应,通过该目标节点获取请求方请求读取的该热Key的目标热Key数据,将该目标热Key数据返回给请求方,如将热Key数据写入到Redis集群的N个节点,而每N个节点对应一个节点Key,即热Key对应有N个节点Key,当有M个热Key数据读取请求并发时,则可以将M个热Key数据读取请求随机分配到这N个节点Key中,通过每个节点Key对应的Redis集群上的节点大致平均处理M/N个热Key数据读取请求。相对于现有技术中从单一的热Key上获取热Key数据,本技术方案利用根据所述热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key,通过该目标节点Key对应的目标节点向请求方返回热Key数据,大大降低了热Key对应的节点Key的并发处理压力,同时将热Key的并发能力处理提高了N倍,其中N为写入热Key数据的节点数量。

本实施例提供的热Key数据并发响应方法,通过接收请求方发送的热Key数据读取请求,根据热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key,根据目标节点Key的节点标识将热Key数据读取请求映射到目标节点Key对应的目标节点;接收目标节点响应该热Key数据读取请求读取到的目标热Key数据,将标热Key数据返回请求方,从而提高了热Key的并发处理和响应能力。

为了更清楚的阐述本申请的技术方案,下面针对热Key数据并发响应方法的多个实施例进行说明。

在本申请中,Redis集群的所有节点上均缓存有热Key数据,可以是将热Key数据主动写入Redis集群的所有节点,还可以是热Key数据被动写入Redis集群的所有节点。下面对在Redis集群的所有节点主动写入和被动写入热Key数据进行说明。

在一实施例中,在步骤S220的根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点之前,还可以包括:

S201、判断随机选择的目标节点Key对应的目标节点是否存储有热Key数据,若是,则执行步骤S202,否则,执行步骤S203。

若随机选择的目标节点Key对应的目标节点没有存储有热Key数据,则表示热Key数据没有写入到该目标节点中;若目标节点存储有热Key数据,则表示该热Key数据写入到该目标节点中。在本实施例中,可以主动触发数据服务将热Key数据写入到Redis集群的所有节点中,从而使得热Key的各个节点Key所对应的节点均存储有该热Key的热Key数据。

S202、根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点。

在确定随机选择的目标节点Key对应的目标节点存储有热Key数据,则根据目标节点Key的节点标识,对该节点标识“hotkey_node_n”进行解析处理,从节点标识中得到该节点Key所在Redis集群的节点位置,即根据节点标识中的“node”处的具体内容确定该目标节点Key在Redis集群上的节点位置,从而确定该目标节点Key在Redis集群中的目标节点。

进一步的,将热Key数据请求映射到目标节点Key对应的目标节点,以从目标节点上获取热Key数据,将热Key数据返回至请求方。

S203、从数据服务获取所述热key对应的热Key数据,将所述热Key数据写入到Redis集群的所有节点上。

在被动触发条件下,即若随机选择的目标节点Key对应的目标节点不存储有热Key数据,则触发从数据服务获取热key对应的热Key数据,将热Key数据写入到Redis集群的所有节点上。

S204、将从所述数据服务获取到的所述热Key数据返回至所述请求方。

在本实施例中,当被动触发从数据服务获取热key对应的热Key数据,将热Key数据写入到Redis集群的所有节点上,将从数据服务中获取到的热Key数据直接返回给请求方。

当然,在另一实施例中,还可以是被动触发从数据服务获取热key对应的热Key数据,将热Key数据写入到Redis集群的所有节点,从目标节点中获取热Key数据,将热Key数据返回至请求方。

在一实施例中,步骤S2103按照预设的随机算法从所述至少两个节点Key中选择目标节点Key,可以包括以下步骤:

S301、从预先设置的随机数集合中选择任一随机数。

在本实施例中,随机数集合中的每一个随机数与热Key的节点Key一一对应,进一步的,随机数集合中的每一个随机数可以通过节点标识与热Key的节点Key一一对应。其中,随机数可以是阿拉伯数字、希腊数字、二进制数字等表示。

在一实施例中,该步骤S301从预先设置的随机数集合中选择任一随机数,可以包括以下步骤:

S3011、确定所述热Key对应的节点Key的节点数量。

在本实施例中,可以预先设置热Key对应的节点Key的节点数量,也可以用于缓存热Key数据的Redis集群的节点数量。

S3012、根据所述节点数量确定若干个随机数,得到随机数集合,其中,所述随机数与所述节点Key的节点标识一一对应;其中,所述节点标识用于标识所述节点Key所在的Redis缓存集群的集群节点序号。

在本实施例中,随机数集合中的随机数的个数与热Key节点Key的数量相同,或者说,随机数集合中的随机数的个数不多于热Key节点Key的数量。例如,热Key1对应的Redis集群节点数量为三个,则确定的随机数为3个,如1、2和3;又如,热Key1对应的Redis集群节点数量为5个,则确定的随机数为5个,如A、B、C、D和E。

将这些随机数汇集起来,得到随机数集合。将随机数集合中的每一个随机数与节点Key的节点标识一一建立映射关系,如可以通过节点标识hotkey_node_n中的n与随机数建立映射关系。例如,随机数“1”映射到节点Key1,节点Key1的节点标识为hotkey_node_1;随机数“2”映射到节点Key2,节点Key2的节点标识为hotkey_node_2。

S302、根据所选择的随机数从所述至少两个节点Key查询与所述随机数相匹配的节点标识,将与所述随机数相匹配的节点标识对应的节点Key作为目标节点Key。

根据随机数与节点Key的节点标识之间的映射关系,根据通过随机算法随机选择的随机数查询得到该随机数相对应的节点标识,根据该节点标识可以确定对应的节点Key,将该节点key作为目标节点Key,并根据节点标识确定该目标节点Key在Redis集群中的节点位置。

在一实施例中,步骤S210中的所述根据所述热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key之前,还包括以下步骤:

S200A1、根据所述热Key标识生成热Key对应的至少两个节点Key,并在所述节点Key的预设位置上添加节点标识。

其中,所述节点标识用于标识所述节点Key所在的Redis集群的节点位置。

根据热Key标识,利用节点Key生成器生成该热Key对应的至少两个节点Key,具体的,节点Key的数量可以根据Redis集群的节点数量确定,还可以是根据用户输入的节点Key的数量来确定。节点Key生成器的实现方式,本领域技术人员可熟知,在此不做详细描述。

进一步的,在生成的节点Key的预设位置上插入节点标识,如在节点Key的字段的开头、末尾或中间的任意位置插入节点标识,如hotkey_node_n,用于表示该节点Key在热Key的所有节点Key中的序号及其所对应的节点所在Redis集群中的节点位置。

S200A2、建立所述节点Key与所述Redis集群上的节点之间的映射关系。

将节点Key与其对应的Redis集群上的节点一一对应起来,得到节点Key与所述Redis集群上的节点之间的映射关系。在一实施例中,可以通过节点Key的节点标识与该节点Key在Redis集群上的节点一一对应起来。

在一实施例中,该步骤S220根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点,可以包括以下步骤:

S2201、根据节点Key与Redis集群上的节点之间的映射关系以及所述目标节点Key的节点标识,确定所述目标节点Key在Redis集群中的目标节点。

在本实施例中,每一个节点Key与Redis集群中的唯一节点进行映射,也即是说,某一节点Key在Redis集群上对应有唯一的节点。不同的节点Key可以通过唯一的节点标识进行区分。

节点标识包括该节点Key所对应的热Key、该节点Key所在节点位置以及节点Key序号等信息。例如,节点标识为hotkey_node_n,通过“hotkey”可以确定节点Key所对应的热Key,“node”可以确定该节点Key所在节点位置,以及“n”可以确定节点Key的序号,如热Key有三个节点key,n可以取值1、2和3,分别标识热Key的第一个节点Key、第二个节点Key和第三个节点Key。

在本实施例中,根据目标节点Key的节点标识,对该节点标识进行解析处理,从节点标识中得到、该节点Key所在Redis集群的节点位置,从而确定该目标节点Key在Redis集群中的目标节点。

S2202、将所述热Key数据读取请求发送到所述目标节点,以通过所述目标节点响应所述热Key数据读取请求。

将热Key数据读取请求发送到Redis集群的目标节点上,以通过该目标节点响应该热Key数据读取请求。其中,目标节点上缓存有该热Key的热Key数据。

下面结合图3和图4对本申请方案进行示例性说明,图3是主动写入状态下的热Key数据并发响应过程的原理图,图4是被动写入状态下的热Key数据并发响应过程的原理图。

如图3所示,主动写入下的热Key数据并发响应过程可以如下:

首先,推送服务根据预先配置好的热Key,从数据服务中获取对应的热Key数据,并按照预设的规则将热Key数据写入到Redis集群的全部节点上,每个节点对应有热Key的节点Key,其中,每个节点Key均有唯一的节点标识,如第一个节点Key“xx_{random_700}_1”映射到Redis集群的第一个节点,第二个节点Key“xx_{random_650}_2”映射到Redis集群的第二个节点,第三个节点Key“xx_{random_150}_3”映射到Redis集群的第三个节点。

然后,当请求方发送热Key数据读取请求,如读取某网站的某一热Key对应的热Key数据,则从该热Key对应的节点Key中随机获取一个节点Key作为目标节点Key,如随机获取的节点Key为第三个节点Key“xx_{random_150}_3”,则从第三个节点Key对应的Redis集群中获取缓存在第三个节点上的热Key数据,将该热Key数据返回至请求方。

如图4所示,被动写入下的热Key数据并发响应过程可以如下:

在本示例中,热Key对应有多个节点Key,每个节点Key具有唯一的节点标识,每个节点Key与Redis集群上的节点具有映射关系。如,热Key具有三个节点Key,第一个节点Key“xx_{random_700}_1”映射到Redis集群的第一个节点,第二个节点Key“xx_{random_650}_2”映射到Redis集群的第二个节点,第三个节点Key“xx_{random_150}_3”映射到Redis集群的第三个节点。

首先,当请求方发送热Key数据读取请求,如读取某网站的某一热Key对应的热Key数据,根据随即算法,从该热Key对应的节点Key中随机获取一个节点Key作为目标节点Key,如随机选取第三个节点Key“xx_{random_150}_3”作为目标节点Key。

然后,检测目标节点Key映射到的目标节点上是否缓存有该热Key数据,若存在,在从目标节点Key从获取热Key数据并返回请求方;若不存在,则从数据服务中获取热Key数据,将热Key数据按照预设规则写入到Redis集群的全部节点上,并将从数据服务中获取到的热Key数据返回至请求方。

由于热Key数据已经写入到Redis集群的全部节点上,当接收到下一热Key数据读取请求时,按照随机选择的热Key对应的节点Key,从该节点Key对应的Redis集群中的节点上获取热Key数据即可。

在上述实施例中,热Key数据读取请求可以发送到热Key的节点Key对应的至少两个Redis集群节点上进行响应,避免了将热Key数据的获取集中在热Key对应的节点上而导致该热Key对应的节点并发压力过大的问题,提高了热Key的并发响应能力。

以上示例仅用于辅助阐述本公开技术方案,其涉及的图示内容及具体流程不构成对本公开技术方案的使用场景的限定。

下面对热Key数据并发响应装置的相关实施例进行详细阐述。

图5是本申请实施例提供的一种热Key数据并发响应装置的结构示意图,该热Key数据并发响应装置可以执行于服务器端。

具体的,如图5所示,该热Key数据并发响应装置200可以包括:节点Key选择模块210、读取请求映射模块220和热Key数据返回模块230;

节点Key选择模块210,用于接收请求方发送的热Key数据读取请求,根据所述热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key;

读取请求映射模块220,用于根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点;

热Key数据第一返回模块230,用于接收所述目标节点响应所述热Key数据读取请求读取到的目标热Key数据,将所述目标热Key数据返回请求方。

本实施例提供的热Key数据并发响应装置,应用于服务端,通过节点Key选择模块210接收请求方发送的热Key数据读取请求,根据热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key,读取请求映射模块220根据目标节点Key的节点标识将热Key数据读取请求映射到目标节点Key对应的目标节点;热Key数据第一返回模块230接收目标节点响应该热Key数据读取请求读取到的目标热Key数据,将标热Key数据返回请求方,大大降低了热Key对应的节点Key的并发处理压力,提高了热Key的并发处理和响应能力。

在一实施例中,节点Key选择模块210包括:热Key标识确定单元、节点Key查找单元和目标节点Key选择单元;

其中,热Key标识确定单元,用于根据所述热Key数据读取请求确定热Key对应的热Key标识;节点Key查找单元,用于根据所述热Key标识查找该热Key在Redis集群中对应的至少两个节点Key;目标节点Key选择单元,用于按照预设的随机算法从所述至少两个节点Key中选择目标节点Key。

在一实施例中,热Key数据并发响应装置200,还包括:判断模块,用于判断随机选择的目标节点Key对应的目标节点是否存储有热Key数据;

若随机选择的目标节点Key对应的目标节点存储有热Key数据,执行读取请求映射模块220的根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点的功能。

在一实施例中,热Key数据并发响应装置200,还包括:热Key数据被动写入模块和热Key数据第一返回模块;

热Key数据被动写入单元,用于若随机选择的目标节点Key对应的目标节点不存储有热Key数据,从数据服务获取所述热key对应的热Key数据,将所述热Key数据写入到Redis集群的所有节点上;热Key数据第一返回模块,用于将从所述数据服务获取到的所述热Key数据返回至所述请求方。

在一实施例中,目标节点Key选择单元包括:随机数选择子单元和目标节点Key选择子单元;

其中,随机数选择子单元,用于从预先设置的随机数集合中选择任一随机数;目标节点Key选择子单元,用于根据所选择的随机数从所述至少两个节点Key查询与所述随机数相匹配的节点标识,将与所述随机数相匹配的节点标识对应的节点Key作为目标节点Key。

在一实施例中,所述随机数选择子单元包括:节点数量确定子模块和随机数集合得到子模块;

其中,节点数量确定子模块,用于确定所述热Key对应的节点Key的节点数量;随机数集合得到子模块,用于根据所述节点数量确定若干个随机数,得到随机数集合,其中,所述随机数与所述节点Key的节点标识一一对应;其中,所述节点标识用于标识所述节点Key所在的Redis缓存集群的集群节点序号。

在一实施例中,热Key数据并发响应装置200,还包括:节点Key生成模块和映射关系建立模块;

节点Key生成模块,用于根据所述热Key标识、当前时间戳以及随机数生成热Key对应的至少两个节点Key;其中,所述节点Key包括节点标识,所述节点标识用于标识所述节点Key所在的Redis集群的节点位置;映射关系建立模块,用于建立所述节点Key与所述Redis集群上的节点之间的映射关系。

在一实施例中,读取请求映射模块220包括:目标节点确定单元和读取请求发送单元;

其中,目标节点确定单元,用于根据节点Key与Redis集群上的节点之间的映射关系以及所述目标节点Key的节点标识,确定所述目标节点Key在Redis集群中的目标节点;读取请求发送单元,用于将所述热Key数据读取请求发送到所述目标节点,以通过所述目标节点响应所述热Key数据读取请求。

本实施例的热Key数据并发响应装置可执行本申请前述实施例所示的热Key数据并发响应方法,其实现原理相类似,此处不再赘述。

本申请实施例中提供了一种电子设备,该电子设备包括:存储器和处理器;至少一个程序,存储于存储器中,用于被处理器执行时,与现有技术相比可实现:大大降低了热Key对应的节点Key的并发处理压力,提高了热Key的并发处理和响应能力。

在一个可选实施例中提供了一种电子设备,如图6所示,图6所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。

处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。

总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。

存储器4003用于存储执行本申请方案的应用程序代码,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述方法实施例所示的内容。

其中,电子设备包括但不限于:移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图6示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与现有技术相比,本申请实施例大大降低了热Key对应的节点Key的并发处理压力,提高了热Key的并发处理和响应能力。

本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备,如电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行时实现如下情况:

接收请求方发送的热Key数据读取请求,根据所述热Key数据读取请求从Redis集群中的热Key对应的至少两个节点Key中选择目标节点Key;

根据所述目标节点Key的节点标识将所述热Key数据读取请求映射到所述目标节点Key对应的目标节点;

接收所述目标节点响应所述热Key数据读取请求读取到的目标热Key数据,将所述目标热Key数据返回请求方。

需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。

上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。

上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备执行上述实施例所示的方法。

可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定,例如,节点Key选择模块还可以被描述为“选择节点Key的模块”。

应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

以上仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

相关技术
  • 热Key数据并发响应方法、装置、设备及存储介质
  • Key-Value数据库用户请求的高速并发处理方法
技术分类

06120112859386