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

缓存数据获取方法、装置、设备及存储介质

文献发布时间:2023-06-19 10:24:22


缓存数据获取方法、装置、设备及存储介质

技术领域

本申请涉及云存储的缓存数据处理技术领域,特别是涉及一种缓存数据获取方法、装置、计算机设备和存储介质。

背景技术

现有技术中随着业务复杂度的提升,当在本地缓存中某一个对象在某段时间内突然暴增,尤其是动态生成的对象,则缓存该对象所占用的内存会出现暴涨。此时,在缓存数据处理过程中,一般采用Redis、MemCache等缓存中间件缓存该对象的原始数据,缓存中间件在缓存数据时按照设置的最大内存去缓存数据。若该对象的原始数据所占用的内存暴涨至缓存中间件设置的最大内存后,将导致其他缓存对象被清理或被持久化到磁盘,对缓存中间件的性能造成不良影响;若不希望其他缓存被清理或者持久化到磁盘,就需要将缓存中间件进行扩容、则可能使缓存中间件陷入不断扩容的循环压力中,从而导致系统的每秒查询率和稳定性降低。

发明内容

本发明提供一种缓存数据获取方法、装置、电子设备及计算机可读存储介质,其主要目的在于解决目前存在当在本地缓存中动态生成的对象在某段时间内突然暴增,则缓存该对象所占用的内存会出现暴涨而引发系统的每秒查询率和稳定性降低的问题。

为实现上述目的,本发明第一方面提供了一种缓存数据获取方法,包括:

接收用户发送的缓存请求,所述缓存请求包括需获取的缓存对象、以及查询所述缓存对象的目标集群服务节点地址;

通过调用后台接口查询所述目标集群服务节点的本地缓存中是否存在动态生成对象,所述动态生成对象为由基本数据动态组装生成的数据;

若是则在所述本地缓存中获取所述动态生成对象,并将所述动态生成对象作为缓存对象返回给所述用户。

可选的,在本发明第一方面的另一种实现方式中,所述查询所述目标集群服务节点的本地缓存中是否存在动态生成对象之后,所述方法还包括:

若否则从缓存中间件获取目标基本数据,所述目标基本数据为数据库中的固定数据,所述目标基本数据可以存储至区块链节点;

对所述目标基本数据进行动态组装,得到目标动态生成对象;

将所述目标动态生成对象存储至所述本地缓存中;

从所述本地缓存中获取所述目标动态生成对象,并将所述目标动态生成对象作为缓存对象返回给所述用户。

可选的,在本发明第一方面的另一种实现方式中,所述对所述目标基本数据进行动态组装,得到目标动态生成对象具体包括:

根据所述目标基本数据中的数据类型,对每一个所述数据类型对应的数据个数进行计数,得到N个所述数据类型对应的基本数据;

将所述N个基本数据进行拼接组装处理,得到N!个所述目标动态生成对象,其中,所述N!为数值N的阶乘。

可选的,在本发明第一方面的另一种实现方式中,所述从所述本地缓存中获取所述目标动态生成对象,并将所述目标动态生成对象作为缓存对象返回给所述用户之后,所述方法还包括:

给所述缓存中间件中的所述目标动态生成对象设定预置的过期时间;

当到达所述预置的过期时间时,所述目标动态生成对象将被删除。

可选的,在本发明第一方面的另一种实现方式中,所述接收用户发送的缓存请求之前,所述方法还包括:

根据预设的固定链表长度采用双向链表结构,将所述动态生成对象缓存至所述本地缓存中;

所述接收用户发送的缓存请求之前,所述方法还包括:

采用最近最少使用算法更新所述本地缓存。

可选的,在本发明第一方面的另一种实现方式中,所述接收用户发送的缓存请求之前,所述方法还包括:

获取用户的历史缓存请求;

根据所述历史缓存请求,确定请求访问数量达到预设阈值的数据库中的目标固定数据;

将所述目标固定数据汇成对应的数据子集,并将所述数据子集存储至所述缓存中间件。

本发明第二方面提供了一种缓存数据获取装置,包括:

缓存接收模块,用于接收用户发送的缓存请求,所述缓存请求包括需获取的缓存对象、以及查询所述缓存对象的目标集群服务节点地址;

动态生成对象查询模块,用于通过调用后台接口查询所述目标集群服务节点的本地缓存中是否存在动态生成对象,所述动态生成对象为由基本数据动态组装生成的数据;

第一缓存对象返回模块,用于若是则在所述本地缓存中获取所述动态生成对象,并将所述动态生成对象作为缓存对象返回给所述用户。

在本发明缓存数据获取装置的另一个实施例中,所述装置还包括:

目标基本数据获取模块,用于若否则从缓存中间件获取目标基本数据,所述目标基本数据为数据库中的固定数据,所述目标基本数据可以存储至区块链节点;

动态组装模块,用于对所述目标基本数据进行动态组装,得到目标动态生成对象;

存储模块,用于将所述目标动态生成对象存储至所述本地缓存中;

第二缓存对象返回模块,用于从所述本地缓存中获取所述目标动态生成对象,并将所述目标动态生成对象作为缓存对象返回给所述用户。

可选的,在本发明缓存数据获取装置的另一个实施例中,所述动态组装模块具体包括:

计数模块,用于根据所述目标基本数据中的数据类型,对每一个所述数据类型对应的数据个数进行计数,得到N个所述数据类型对应的基本数据;

拼接组装处理模块,用于将所述N个基本数据进行拼接组装处理,得到N!个所述目标动态生成对象,其中,所述N!为数值N的阶乘。

可选的,在本发明缓存数据获取装置的另一个实施例中,所述装置还包括:

过期时间设置模块,用于给所述缓存中间件中的所述目标动态生成对象设定预置的过期时间;

删除模块,用于当到达所述预置的过期时间时,所述目标动态生成对象将被删除。

可选的,在本发明缓存数据获取装置的另一个实施例中,所述装置还包括:

动态生成对象缓存模块,用于根据预设的固定链表长度采用双向链表结构,将所述动态生成对象缓存至所述本地缓存中;

可选的,在本发明缓存数据获取装置的另一个实施例中,所述装置还包括:

缓存更新模块,用于采用最近最少使用算法更新所述本地缓存。

可选的,在本发明缓存数据获取装置的另一个实施例中,所述装置还包括:

历史缓存获取模块,用于获取用户的历史缓存请求;

目标固定数据确定模块,用于根据所述历史缓存请求,确定请求访问数量达到预设阈值的数据库中的目标固定数据;

数据子集存储模块,用于将所述目标固定数据汇成对应的数据子集,并将所述数据子集存储至所述缓存中间件。

本发明第三方面提供了一种缓存数据获取设备,包括存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互联;所述至少一个处理器调用所述存储器中的所述指令,以使得所述缓存数据获取设备执行上述第一方面所述的方法。

本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的方法。

本发明提供的技术方案中,通过接收用户发送的缓存请求,所述缓存请求包括需获取的缓存对象、以及查询所述缓存对象的目标集群服务节点地址;通过调用后台接口查询所述目标集群服务节点的本地缓存中是否存在动态生成对象,所述动态生成对象为由基本数据动态组装生成的数据;若是则在所述本地缓存中获取所述动态生成对象,并将所述动态生成对象作为缓存对象返回给所述用户。本发明实施例根据用户发送的缓存请求,调用后台接口查询请求对象所在目标集群服务节点的本地缓存中是否存在已经动态组装生成的数据,即动态生成对象,来判定是否要返回缓存对象给用户,不需要每次针对缓存请求都在本地缓存中实时动态加工生成对象,因此不会增加缓存请求的响应时间,大大降低了数据缓存过程中缓存中间件的压力,提高了系统的每秒查询率及稳定性。

附图说明

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

图1为本发明实施例中缓存数据获取方法的一个实施例过程示意图;

图2为本发明实施例中缓存数据获取方法的另一个实施例过程示意图;

图3为本发明实施例中缓存数据获取装置的一个实施例示意图;

图4为本发明实施例中缓存数据获取装置的另一个实施例过程示意图;

图5为本发明实施例中缓存数据获取设备的一个实施例示意图。

具体实施方式

本发明实施例提供了一种缓存数据获取方法、装置、设备及存储介质,用于降低数据缓存过程中缓存中间件的压力,提高系统的每秒查询率及稳定性。

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例进行描述。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

在现有技术中,在缓存数据处理过程中,一般采用Redis、MemCache等缓存中间件缓存该对象的原始数据,缓存中间件在缓存数据时按照设置的最大内存去缓存数据。若该对象的原始数据所占用的内存暴涨至缓存中间件设置的最大内存后,将导致其他缓存对象被清理或被持久化到磁盘,对缓存中间件的性能造成不良影响;若不希望其他缓存被清理或者持久化到磁盘,就需要将缓存中间件进行扩容、则可能使缓存中间件陷入不断扩容的循环压力中,从而导致系统的每秒查询率和稳定性降低。

本发明提供的缓存数据获取方法能解决目前存在本地缓存中动态生成的对象在某段时间内突然暴增,则缓存该对象所占用的内存会出现暴涨而引发系统的每秒查询率和稳定性降低的问题,以下分别进行详细的说明。

参阅图1,本发明实施例中缓存数据获取方法的一个实施例,该方法可以应用于服务器,服务器可以为一台服务器或服务器集群。具体地,该方法可以包括以下步骤:

S101、接收用户发送的缓存请求,所述缓存请求包括需获取的缓存对象、以及查询所述缓存对象的目标集群服务节点地址。

本申请实施例中,用户根据自身需求发出需缓存数据的缓存请求,缓存请求包括需获取的缓存对象、以及查询所述缓存对象的服务器中目标集群服务节点地址。服务器可以接收到用户发送的接收用户发送的缓存请求。

具体实施时,在另一种实现方式中,所述接收用户发送的缓存请求之前,还可以包括:根据预设的固定链表长度采用双向链表结构,将所述动态生成对象缓存至所述本地缓存中。针对目前一般的缓存数据结构在实现每次缓存时将值前置,缓存满时先清除最不常用的部分,而本发明采用固定链表长度的双向链表实现一个快捷高效的缓存,优选地可以采用java双向链表结构,该结构也可以用在java的线程池队列中,本发明的双向链表结构有俩个端点,一个头部,一个尾部,支持向前遍历或者向后遍历,使用双向链表实现缓存,每次操作后将操作节点置前,删除时先删除结尾点,能够大大提高缓存的效率。

可选的,在本发明另一种实现方式中,所述接收用户发送的缓存请求之前,还包括:获取用户的历史缓存请求;根据所述历史缓存请求,确定请求访问数量达到预设阈值的数据库中的目标固定数据;将所述目标固定数据汇成对应的数据子集,并将所述数据子集存储至所述缓存中间件。具体的,所述缓存中间件可以为Redis、Memcache等,在此不作限定,在缓存中间件中缓存的数据粒度为该中间件所有的缓存对象,具体实施时,缓存中间件缓存了数据库中被频繁请求获取的固定数据、以使得在接收到缓存获取请求时能快速地获取到对应的数据。

进一步地,在另一种实现方式中,所述接收用户发送的缓存请求之前,所述方法还包括:采用最近最少使用算法更新所述本地缓存。本发明具体实施时,所述最近最少使用算法,使用哈希地图和上述的双向链表来实现,其中,双向链表主要用于维护端节点的顺序,哈希地图主要用于存储缓存对象,可以快速定位到该节点在双链表中的位置,而不用遍历双链表来查找,当存在热点数据时,采用最近最少使用算法更新更新本地缓存,提高了本地缓存的效率,并且实现上简单、有效。

S102、通过调用后台接口查询所述目标集群服务节点的本地缓存中是否存在动态生成对象,所述动态生成对象为由基本数据动态组装生成的数据。

S103、若是则在所述本地缓存中获取所述动态生成对象,并将所述动态生成对象作为缓存对象返回给所述用户。

本申请实施例中,服务器根据接收到的缓存请求中的服务器节点地址、通过调用后台接口查询所述目标集群服务节点的本地缓存中是否存在动态生成对象,其中,前端调用后台接口的方式在此不作限定,可以优选Ajax方式,使用Ajax与后台接口交互,利用Ajax进行异步数据请求,得到的数据可以以json或xml格式返回,便于数据处理。此外,上述动态生成对象为由基本数据动态组装生成的数据,通过判断是否已经存在预先动态组装好的动态生成对象,即检测是否已存在缓存请求所请求返回的对象,因为如果不预先缓存得到动态生成的对象、即上述动态生成对象,则需每次缓存请求都需要动态加工生成对象,每一次查看都要访问数据库的话,就会造成资源的极大浪费,若直接在所述本地缓存中获取到了动态生成对象,则可直接将对应的动态生成对象作为缓存对象返回给用户,从而降低了服务器压力,提高了请求访问的效率。

为了节约服务器有限的资源,应该当用户访问时,判断是否已存在动态生成对象,如果访问本地缓存中发现不存在动态生成对象,则查询数据库,通过过滤器的方式产生缓存文件,通过预先判断以根据不同情况进行请求处理,可以大大提高系统的稳定性。

进一步地,在本发明的另一种实现方式中,如图2所示,所述查询所述目标集群服务节点的本地缓存中是否存在动态生成对象之后,所述方法还包括:

S104、若否则从缓存中间件获取目标基本数据,所述目标基本数据为数据库中的固定数据,所述目标基本数据可以存储至区块链的节点。本示例所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

S105、对所述目标基本数据进行动态组装,得到目标动态生成对象。在判断本地缓存中不存在已经组装好的动态生成对象时,则需要实时对应请求的目标基本数据进行动态组装,以得到目标动态生成对象。具体地,根据所述目标基本数据中的数据类型,对每一个所述数据类型对应的数据个数进行计数,得到N个所述数据类型对应的基本数据;将所述N个基本数据进行拼接组装处理,得到N!个所述目标动态生成对象,其中,所述N!为数值N的阶乘。譬如,请求缓存对应的请求对象是数据库中的三种类型数据,且第一类型数据有8个、第二类型数据有12个、第三类型数据有10个;则对这三种类型数据进行动态组装,最多可以生成30!个动态生成对象,其中30!=30*29*28*……*1,即30的阶乘之总和数量的动态生成对象。

S106、将所述目标动态生成对象存储至所述本地缓存中。具体地,服务器将得到的目标动态生成对象存储至本地缓存中,此后,可以直接作为缓存请求对象直接在本地缓存中查询的数据,而不必经过数据库进行查询,提高了系统的每秒查询率。

S107、从所述本地缓存中获取所述目标动态生成对象,并将所述目标动态生成对象作为缓存对象返回给所述用户。具体地,在动态组装好的目标动态生成对象放入本地缓存后,则可从上述本地缓存中获取目标动态生成对象,并将数据作为缓存对象返回给用户。

进一步地,在本发明另一种实现方式中,所述从所述本地缓存中获取所述目标动态生成对象,并将所述目标动态生成对象作为缓存对象返回给所述用户之后,所述方法还包括:给所述缓存中间件中的所述目标动态生成对象设定预置的过期时间;当到达所述预置的过期时间时,所述目标动态生成对象将被删除。具体地,通过设置动态生成对象的过期时间,当到达过期时间时自动删除数据,可以大大降低缓存中间件的压力,提升缓存中间件的性能,以稳定系统的压力。

综上可知,本发明提供的一种缓存数据获取方法,通过接收用户发送的缓存请求,所述缓存请求包括需获取的缓存对象、以及查询所述缓存对象的目标集群服务节点地址;通过调用后台接口查询所述目标集群服务节点的本地缓存中是否存在动态生成对象,所述动态生成对象为由基本数据动态组装生成的数据;若是则在所述本地缓存中获取所述动态生成对象,并将所述动态生成对象作为缓存对象返回给所述用户。本发明实施例根据用户发送的缓存请求,调用后台接口查询请求对象所在目标集群服务节点的本地缓存中是否存在已经动态组装生成的数据,即动态生成对象,来判定是否要返回缓存对象给用户,不需要每次针对缓存请求都在本地缓存中实时动态加工生成对象,因此不会增加缓存请求的响应时间,大大降低了数据缓存过程中缓存中间件的压力,提高了系统的每秒查询率及稳定性。

上面对本发明实施例中缓存数据获取方法进行了描述,下面对本发明实施例中缓存数据获取装置进行描述,请参阅图3,本发明实施例中缓存数据获取装置的一个实施例包括:

缓存接收模块21,用于接收用户发送的缓存请求,所述缓存请求包括需获取的缓存对象、以及查询所述缓存对象的目标集群服务节点地址;

动态生成对象查询模块22,用于通过调用后台接口查询所述目标集群服务节点的本地缓存中是否存在动态生成对象,所述动态生成对象为由基本数据动态组装生成的数据;

第一缓存对象返回模块23,用于若是则在所述本地缓存中获取所述动态生成对象,并将所述动态生成对象作为缓存对象返回给所述用户。

可选的,如图4所示,在本发明缓存数据获取装置的另一个实施例中,所述装置还包括:

目标基本数据获取模块24,用于若否则从缓存中间件获取目标基本数据,所述目标基本数据为数据库中的固定数据,所述目标基本数据可以存储至区块链节点;

动态组装模块25,用于对所述目标基本数据进行动态组装,得到目标动态生成对象;

存储模块26,用于将所述目标动态生成对象存储至所述本地缓存中;

第二缓存对象返回模块27,用于从所述本地缓存中获取所述目标动态生成对象,并将所述目标动态生成对象作为缓存对象返回给所述用户。

可选的,在本发明缓存数据获取装置的另一个实施例中,所述动态组装模块25具体包括:

计数模块,用于根据所述目标基本数据中的数据类型,对每一个所述数据类型对应的数据个数进行计数,得到N个所述数据类型对应的基本数据;

拼接组装处理模块,用于将所述N个基本数据进行拼接组装处理,得到N!个所述目标动态生成对象,其中,所述N!为数值N的阶乘。

可选的,在本发明缓存数据获取装置的另一个实施例中,所述装置还包括:

过期时间设置模块,用于给所述缓存中间件中的所述目标动态生成对象设定预置的过期时间;

删除模块,用于当到达所述预置的过期时间时,所述目标动态生成对象将被删除。

可选的,在本发明缓存数据获取装置的另一个实施例中,所述装置还包括:

动态生成对象缓存模块,用于根据预设的固定链表长度采用双向链表结构,将所述动态生成对象缓存至所述本地缓存中;

可选的,在本发明缓存数据获取装置的另一个实施例中,所述装置还包括:

缓存更新模块,用于采用最近最少使用算法更新所述本地缓存。

可选的,在本发明缓存数据获取装置的另一个实施例中,所述装置还包括:

历史缓存获取模块,用于获取用户的历史缓存请求;

目标固定数据确定模块,用于根据所述历史缓存请求,确定请求访问数量达到预设阈值的数据库中的目标固定数据;

数据子集存储模块,用于将所述目标固定数据汇成对应的数据子集,并将所述数据子集存储至所述缓存中间件。

需要说明的是,本发明实施例中的装置可以用于实现上述方法实施例中的全部技术方案,其各个功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述实例中的相关描述,此处不再赘述。

上面从模块化功能实体的角度对本发明实施例中的缓存数据获取装置进行详细描述,下面从硬件处理的角度对本发明实施例中缓存数据获取设备进行详细描述。

图5是本发明实施例提供的一种缓存数据获取设备的结构示意图,该缓存数据获取设备300可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)301(例如,一个或一个以上处理器)和存储器309,一个或一个以上存储应用程序307或数据306的存储介质308(例如一个或一个以上海量存储设备)。其中,存储器309和存储介质308可以是短暂存储或持久存储。存储在存储介质308的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对图计算的布尔型变量存储中的一系列指令操作。更进一步地,处理器301可以设置为与存储介质308通信,在缓存数据获取设备300上执行存储介质308中的一系列指令操作。

缓存数据获取设备300还可以包括一个或一个以上电源302,一个或一个以上有线或无线网络接口303,一个或一个以上输入输出接口304,和/或,一个或一个以上操作系统305,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。本领域技术人员可以理解,图3中示出的缓存数据获取设备结构并不构成对缓存数据获取设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中,该计算机可读存储介质可以是非易失性的,也可以是易失性的。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(randomaccess memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

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

相关技术
  • 缓存数据获取方法、装置、设备及存储介质
  • 缓存装置及用于缓存装置的缓存数据获取方法
技术分类

06120112533255