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

堆内数据缓存同步方法、装置、计算机设备及存储介质

文献发布时间:2023-06-19 11:57:35


堆内数据缓存同步方法、装置、计算机设备及存储介质

技术领域

本发明涉及数据同步技术领域,尤其揭露了一种堆内数据缓存同步方法、装置、计算机设备及存储介质。

背景技术

在大并发量的情况下,服务器应用为了减轻数据库压力,一般会在服务器中集成第三方缓存框架,诸如redis、memchache等框架做全局缓存,虽然使用上述框架的做法固然能够很好实现多个服务器之间缓存数据的同步,但是上述做法的缺点为增加成本以及服务端的复杂度。

在缓存的热点数据体量并不大的情况下,一般的解决方案就是做堆内缓存的方式,这种方式虽然可减少对第三方缓存框架的依赖,但是堆内缓存有一个很大的弊端,如何解决堆内缓存数据同步的问题。针对于上述现象,本领域技术亟需寻找一种新得技术方案来解决。

发明内容

基于此,有必要针对上述技术问题,提供一种堆内数据缓存同步方法、装置、计算机设备及存储介质,用于减少成本和解决集群环境堆内缓存数据同步的问题。

一种堆内数据缓存同步方法,包括:

在集群环境中的第一服务器初次接收到预设请求后,对所述预设请求进行处理之后获取请求内容,并将所述请求内容写入至所述第一服务器的本地缓存,同时控制所述第一服务器向所述集群环境中的第二服务器发送异步缓存请求;所述集群环境中以多个服务器为对象搭建;所述第二服务器是指所述集群环境中除所述第一服务器之外的其他服务器;

控制接收到异步缓存请求的所述第二服务器向所述第一服务器提供接口,并令所述第一服务器异步调用所述接口之后,通过所述接口将所述请求内容写入至所述第二服务器中的本地缓存;

在所述第一服务器或/和所述第二服务器再次接收到所述预设请求后,直接从与所述第一服务器或/和所述第二服务器的本地缓存中获取与所述预设请求对应的所述请求内容。

一种堆内数据缓存同步装置,包括:

控制模块,用于在集群环境中的第一服务器初次接收到预设请求后,对所述预设请求进行处理之后获取请求内容,并将所述请求内容写入至所述第一服务器的本地缓存,同时控制所述第一服务器向所述集群环境中的第二服务器发送异步缓存请求;所述集群环境中以多个服务器为对象搭建;所述第二服务器是指所述集群环境中除所述第一服务器之外的其他服务器;

写入模块,用于控制接收到异步缓存请求的所述第二服务器向所述第一服务器提供接口,并令所述第一服务器异步调用所述接口之后,通过所述接口将所述请求内容写入至所述第二服务器中的本地缓存;

获取模块,用于在所述第一服务器或/和所述第二服务器再次接收到所述预设请求后,直接从与所述第一服务器或/和所述第二服务器的本地缓存中获取与所述预设请求对应的所述请求内容。

一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述堆内数据缓存同步方法。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述堆内数据缓存同步方法。

上述堆内数据缓存同步方法、装置、计算机设备及存储介质,其一,只使用了一种框架来实现堆内缓存数据(请求内容)同步的情况,减少了对第三方缓存框架的应用,减少了以服务器作为对象而搭建的集群环境的复杂度和代码的体量,因此,也明显可减少数据同步所需花费的成本;其二,相比目前的堆内数据缓存的方式,本发明可解决堆内缓存数据同步的问题,减少了集群服务器的工作量,以及减少对底层的预设数据库的访问压力。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一实施例中堆内数据缓存同步方法的一应用环境示意图;

图2是本发明一实施例中堆内数据缓存同步方法的一流程图;

图3是本发明一实施例中堆内数据缓存同步方法的步骤S40的流程示意图;

图4是本发明一实施例中堆内数据缓存同步方法的步骤S70的流程示意图;

图5是本发明一实施例中堆内数据缓存同步方法的步骤S110的流程示意图;

图6是本发明一实施例中堆内数据缓存同步装置的结构示意图;

图7是本发明一实施例中计算机设备的一示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供的堆内数据缓存同步方法,可应用在如图1的应用环境中,其中,客户端通过网络与服务器进行通信。其中,客户端可以包括但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务器可以是多个服务器(如第一服务器和第二服务器)组成的服务器集群来实现。

在一实施例中,如图2所示,提供一种堆内数据缓存同步方法,以该方法应用在图1中的服务器为例进行说明,包括如下步骤:

S10,在集群环境中的第一服务器初次接收到预设请求后,对所述预设请求进行处理之后获取请求内容,并将所述请求内容写入至所述第一服务器的本地缓存,同时控制所述第一服务器向所述集群环境中的第二服务器发送异步缓存请求;所述集群环境中以多个服务器为对象搭建;所述第二服务器是指所述集群环境中除所述第一服务器之外的其他服务器;

可理解地,本发明的执行主体为第一服务器和第二服务器组成的集群服务器,以spring框架搭建集群服务器中第一服务器和第二服务器的堆内数据缓存机制;集群环境中的第一服务器和第二服务器可不限制数量,也即第一服务器和第二服务器在集群环境中的数量可至少为一个,其中,集群环境中的第一服务器和第二服务器是属于相同的应用,因此第一服务器和第二服务器组成的集群也可称为应用集群;预设请求是用户是通过负载向第一服务器和第二服务器请求服务器所对应的请求消息,如可向第一服务器请求第一请求信息,向第二服务器请求第二请求信息,其中,请求信息存在对应的请求内容,请求内容可为与请求信息对应且缓存在服务器本地缓存中的内容,也可为未查询到与请求信息对应的内容,其中,请求内容的数据类型可为任意简单类型的数据和可序列化的复杂类型数据;集群环境中的第二服务器提供一个暴露状态的接口,通过该接口,令第一服务器向第二服务器发送异步缓存请求,以通过第一服务器向第一服务器异步同步请求内容;本实施例通过集群环境中的第一服务器和第二服务器实现堆内数据同步,主要是解决当前存在的服务器工作和数据库连接开销大的问题(具体地,用户的请求信息经过负载路由到达第一服务器后,第一服务器查库后将获取的请求内容存储至第一服务器中的本地缓存,在下次相同的请求信息重新通过负载路由进入到第一服务器后,可直接从第一服务器中的本地缓存获取请求内容,但在下次箱体的请求信息通过另外的负载路由到达第二服务器后,第二服务器中的本地缓存并未存在与请求信息对应的请求内容,此时第二服务器只能去查库获取与请求信息对应的请求内容,明显会增加服务器的工作量以及增加数据库的连接开销的问题,且在存在多个请求信息时,明显情况会更加严重)。

S20,控制接收到异步缓存请求的所述第二服务器向所述第一服务器提供接口,并令所述第一服务器异步调用所述接口之后,通过所述接口将所述请求内容写入至所述第二服务器中的本地缓存;

可理解地,第二服务器中的接口其实是一种针对于第一服务器所提供具有暴露状态的服务接口(同步数据接口),通过该接口可将第一服务器中的服务内容缓存至第二服务器中的本地缓存,其中,接口是基于spring框架而向外获取请求内容,接口设置的参类型是Object,因此可接收多种简单类型和可序列化的复杂类型数据的请求内容;本实施例是集群环境中的服务器的数据同步,可减少访问预设数据库的次数,且本实施例是异步调用接口,并不会影响第一服务器处理用户的预设请求。

S30,在所述第一服务器或/和所述第二服务器再次接收到所述预设请求后,直接从与所述第一服务器或/和所述第二服务器的本地缓存中获取与所述预设请求对应的所述请求内容。

可理解地,本实施例在上述已搭建好集群环境中的数据同步系统后,在再次接收到与第一服务器或第二服务器所对应的预设请求后,都可直接从本地缓存获取请求内容,而无需再次进行查库获取。

步骤S10至S30所在的实施例中,其一,只使用了一种框架来实现堆内缓存数据(请求内容)同步的情况,减少了对第三方缓存框架的应用,减少了已服务器作为对象而搭建的集群环境的复杂度(一旦集群环境中引入了第三方缓存框架,则需对第三方缓存框架做高可用性,此种方式将会增加整个系统应用的复杂度)和代码的体量,明显可减少数据同步所需花费的成本,其二,相比目前的堆内数据缓存的方式,可解决堆内缓存数据同步的问题,减少服务器的工作量,以及减少对底层的预设数据库的访问压力。

进一步地,如图3所示,所述令所述第一服务器异步调用所述接口之前,还包括:

S40,对所述第二服务器提供的所述接口进行地址标记,得到接口地址;

S50,将所述接口地址写入至配置项中,以通过所述配置项令所述集群环境中的所述第一服务器异步调用所述接口;所述配置项是所有所述接口地址的地址集合。

可理解地,接口存在一个对应的接口地址,接口地址主要由网络IP、应用端口和接口URL组成,该接口地址记录也可理解为其他服务器的请求地址,接口地址是用于其他服务器通过网络访问该接口地址访问该接口,向该接口发起网络请求,读取请求内容,并将请求内容写入至本地缓存中,该接口地址被标记为syncData;配置项可理解为所有接口地址的集合,该配置项被标记为syncUrls,且配准项中也包含集群环境中第一服务器的请求地址;本实施例可令集群环境中所有的第一服务器都可异步调用第二服务器的接口,另外本实施例在此只是需要调用第二服务服务器的接口,在配置配置项成功后,本集群环境中所有服务器中的接口都可被其他服务器进行调用(本实施例中的第一服务器和第二服务器共同构成一个集群,两个服务器之间的功能是等同的)。

进一步地,所述令所述集群环境中的所述第一服务器异步调用所述接口,包括:

在识别到与所述集群环境对应的作用域方法中存在预设注解时,将该作用域方法返回的关于所述接口的返回值同步至所述第一服务器后,通过预设客户端工具令所述集群环境中的所述第一服务器异步调用所述接口;

可理解地,预设注解是作用在作用域方法上,其中作用域方法是用于执行异步调用接口,将第一服务器中的本地缓存的请求内容通过该接口写入至第二服务器中的本地缓存,具体是通过与方法对应的Java规范去实现,预设注解被标记为SyncDataAnno;返回值是用于让其他服务器知道可以进行异步调用的数据,其中,返回值可为任意简单类型的数据和可序列化的复杂类型数据,如简单的int类的数据,或者复杂Object对象数据;预设客户端工具包括httpClient、okhttp、resttemplate或者自使用的socket。本实施例在识别到集群环境对应的作用域方法中存在预设注解时,就会将该方法的返回值同步到就请你环境中的其他服务器(如第一服务器)中,并通过预设客户端工具来实现异常调用以及不同服务器之间的堆内缓存数据(请求内容)的同步。

所述将该作用域方法返回的关于接口的返回值同步至所述第一服务器之前,还包括:

通过搭建所述集群环境的spring框架中的aop功能获取该作用域方法返回的关于所述接口的返回值。

可理解地,通过spring框架中的aop功能将事务处理的代码从业务代码逻辑划分出来,进而更容易得到返回值。通过本实施例设置的aop功能,得到返回值的速将会提高,从而可进一步地提升异步调用接口的效率。

进一步地,如图4所示,所述通过所述接口将所述请求内容写入至所述第二服务器中的本地缓存之前,还包括:

S60,查询所述第二服务器中的本地缓存中是否存在所述请求内容;

S70,在存在所述请求内容时,直接返回所述第二服务器中的本地缓存存在所述请求内容的结果,同时禁止通过所述接口将所述请求内容写入至所述第二服务器中的本地缓存的过程。

可理解地,本实施例主要是为了在接收到集群环境中第一服务器中的异步缓存请求后,避免调用接口的情况,以致于第二服务器中的本地缓存存在多个请求内容(重复写缓存数据),因此可通过本实施例先进行验证,避免浪费调用和写入的数据资源。在另外一实施例中,在不存在所述请求内容时,可直接将所述第一服务器中的本地缓存的请求内容直接写入至第二服务器中的本地缓存。

进一步地,所述令所述第一服务器异步调用所述接口之前,还包括:

在监测到所述第一服务器存在网络环境问题时,通过预设开源工具实行重试机制直至达到预设重试次数或者令所述第一服务器异步能调用到所述接口。

可理解地,网络环境问题包括但不限于网络波动和网络不稳定;预设开源工具可为开源的httpclient;本实施例主要是通过重试机制来使第一服务器可按照自动化流程执行异步调用的功能,并跟按照一定的次数进行调用,避免错过网络恢复后,错失异步调用的时机。

进一步地,所述将所述请求内容写入至所述第一服务器的本地缓存,包括:

从与所述第一服务器关联的预设数据库中查询到与所述预设请求对应的请求内容,将所述请求内容从所述预设数据库中异步写入至所述第一服务器中的本地缓存。

可理解地,本实施例主要是写入本地缓存的过程,写入本地缓存的目主要是为了进行异步调用堆内缓存数据;另外本实施例之前也可去查询所述第一服务器中的本地缓存中是否存在所述请求内容,在存在时,直接使用请求内容进行写入至第一服务器中的本地缓存的流程,在不存在时,重新查询预设数据库,并将查询到的请求内容再次写入至第一服务器中的本地缓存。

进一步地,如图5所示,所述直接从与所述第一服务器或/和所述第二服务器的本地缓存中获取与所述预设请求对应的所述请求内容之后,还包括:

S110,在预设时间阈值内监测所述第一服务器或所述第二服务器的本地缓存中缓存请求内容的数据量;

S120,在确认所述数据量达到预设目标数据量时,根据所述请求内容的先后维度或时间维度或统计维度清除所述第一服务器或所述第二服务器的本地缓存中的部分请求内容。

可理解地,先后维度依据先进先出实现,具体以FIFO队列将本地缓存中的请求内容进行排列,在本地缓存的数据量达到目标数据量时,通过新加入的请求内容把队列中的第一次加入至本地缓存中的请求内容进行替换,以实现删除掉本地缓存中的部分请求内容;时间维度依据长时间不使用的请求内容实现,具体通过LRU算法识别各个请求内容对应的访问时间,在本地缓存的数据量达到目标数据量时,直接删除掉本地缓存中已识别出访问时间越前的请求内容;统计维度依据访问次数最少的请求内容实现,具体以LFU算法识别一定时间内所有请求内容的访问次数,在本地缓存的数据量达到目标数据量时,直接删除掉本地缓存中已识别出访问次数最少的请求内容。

综上所述,上述提供了一种堆内数据缓存同步方法,其一,只使用了一种框架来实现堆内缓存数据同步的情况,减少了对第三方缓存框架的应用,减少了已服务器作为对象而搭建的集群环境的复杂度(一旦集群环境中引入了第三方缓存框架,则需对第三方缓存框架做高可用性,此种方式将会增加整个系统应用的复杂度)和代码的体量,明显可减少数据同步所需花费的成本,其二,相比目前的堆内数据缓存的方式,可解决堆内缓存数据同步的问题,减少服务器的工作量,以及减少对底层的预设数据库的访问压力。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

在一实施例中,提供一种堆内数据缓存同步装置,该堆内数据缓存同步装置与上述实施例中堆内数据缓存同步方法一一对应。如图6所示,该堆内数据缓存同步装置包括控制模块11、写入模块12和获取模块13。各功能模块详细说明如下:

控制模块11,用于在集群环境中的第一服务器初次接收到预设请求后,对所述预设请求进行处理之后获取请求内容,并将所述请求内容写入至所述第一服务器的本地缓存,同时控制所述第一服务器向所述集群环境中的第二服务器发送异步缓存请求;所述集群环境中以多个服务器为对象搭建;所述第二服务器是指所述集群环境中除所述第一服务器之外的其他服务器;

写入模块12,用于控制接收到异步缓存请求的所述第二服务器向所述第一服务器提供接口,并令所述第一服务器异步调用所述接口之后,通过所述接口将所述请求内容写入至所述第二服务器中的本地缓存;

获取模块13,用于在所述第一服务器或/和所述第二服务器再次接收到所述预设请求后,直接从与所述第一服务器或/和所述第二服务器的本地缓存中获取与所述预设请求对应的所述请求内容。

进一步地,所述堆内数据缓存同步装置还包括:

标记模块,用于对所述第二服务器提供的所述接口进行地址标记,得到接口地址;

加入模块,用于将所述接口地址写入至配置项中,以通过所述配置项令所述集群环境中的所述第一服务器异步调用所述接口;所述配置项是所有所述接口地址的地址集合。

进一步地,所述写入模块包括:

异步调用子模块,在识别到与所述集群环境对应的作用域方法中存在预设注解时,将该作用域方法返回的关于所述接口的返回值同步至所述第一服务器后,通过预设客户端工具令所述集群环境中的所述第一服务器异步调用所述接口;

所述异步调用子模块还包括:

获取子模块,用于通过搭建所述集群环境的spring框架中的aop功能获取该作用域方法返回的关于所述接口的返回值。

进一步地,所述堆内数据缓存同步装置还包括:

查询模块,用于查询所述第二服务器中的本地缓存中是否存在所述请求内容;

返回模块,用于在存在所述请求内容时,直接返回所述第二服务器中的本地缓存存在所述请求内容的结果,同时禁止通过所述接口将所述请求内容写入至所述第二服务器中的本地缓存的过程。

进一步地,所述堆内数据缓存同步装置还包括:

重试模块,用于在监测到所述第一服务器存在网络环境问题时,通过预设开源工具实行重试机制直至达到预设重试次数或者令所述第一服务器异步能调用到所述接口。

进一步地,所述控制模块包括:

导入子模块,用于从与所述第一服务器关联的预设数据库中查询到与所述预设请求对应的请求内容,将所述请求内容从所述预设数据库中异步写入至所述第一服务器中的本地缓存。

进一步地,所述堆内数据缓存同步装置还包括:

监测模块,用于在预设时间阈值内监测所述第一服务器或所述第二服务器的本地缓存中缓存请求内容的数据量;

清除模块,用于在确认所述数据量达到预设目标数据量时,根据所述请求内容的先后维度或时间维度或统计维度清除所述第一服务器或所述第二服务器的本地缓存中的部分请求内容。

关于堆内数据缓存同步装置的具体限定可以参见上文中对于堆内数据缓存同步方法的限定,在此不再赘述。上述堆内数据缓存同步装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储堆内数据缓存同步方法中涉及到的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种堆内数据缓存同步方法。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中堆内数据缓存同步方法的步骤,例如图2所示的步骤S10至步骤S30。或者,处理器执行计算机程序时实现上述实施例中堆内数据缓存同步装置的各模块/单元的功能,例如图6所示模块11至模块13的功能。为避免重复,这里不再赘述。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中堆内数据缓存同步方法的步骤,例如图2所示的步骤S10至步骤S30。或者,计算机程序被处理器执行时实现上述实施例中堆内数据缓存同步装置的各模块/单元的功能,例如图6所示模块11至模块13的功能。为避免重复,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

相关技术
  • 堆内数据缓存同步方法、装置、计算机设备及存储介质
  • 数据缓存的扩容方法、装置、计算机设备和存储介质
技术分类

06120113117241