一种集中管理缓存的方法及装置与流程

文档序号:15399595发布日期:2018-09-11 17:10阅读:158来源:国知局

本发明涉及计算机技术领域,具体涉及一种集中管理缓存的方法及装置。



背景技术:

服务往往是有很多层级的,比如有基础服务、后台服务、以及前台服务。每层服务都有对应的调用和依赖关系,并且每个服务都有自己对应的缓存存储经常访问的数据,当客户端请求一份数据时,相应的服务就会访问缓存,如果缓存中存储有相应的数据,则直接返回数据给客户端,而无需通过服务器从数据库获取数据,这样提高了请求的响应速度,减轻了服务器和数据库的压力。

但是,由于服务的层级较多,在响应客户端的数据请求时,往往会涉及到不同层级的服务之间的调用,而每层服务都有自己对应的缓存,因此,不同层级的服务之间的调用很可能涉及到缓存。这样,将可能出现如下问题:

客户端请求的数据会同时存在与多级服务的缓存中,造成了数据冗余;不同服务层级的缓存存储可能会采用相同的key值,造成了数据污染;各层级服务的缓存更新时间不一致,会导致各层级服务缓存数据不一致;采用多级服务层级的缓存响应客户端的数据请求,降低了请求的响应速度;服务层级较多,当缓存空间不足的时候,只能复制当前缓存的数据至新的缓存上,而无法扩大当前缓存的空间。



技术实现要素:

有鉴于此,本发明实施例提供一种集中管理缓存的方法及装置,能够最大化利用化缓存存储空间,减轻服务器和网络带宽的负担,加快服务器对业务请求的响应速度,保证数据一致性,并且做到高可拓展性和鲁棒性。

为实现上述目的,本发明实施例提供如下技术方案:

一种集中管理缓存的方法,包括:

接收上层服务层转发的数据请求,所述数据请求是由客户端发送至所述上层服务层的;

判断缓存中是否存储有所述数据请求对应的目标数据;

如果缓存中存储有所述数据请求对应的目标数据,则从所述缓存中获取所述数据请求对应的目标数据,并将所述目标数据返回给所述上层服务层,以由所述上层服务层将所述目标数据返回给所述客户端。

可选的,所述数据请求包括所述客户端请求访问的统一资源定位符url和请求参数,则所述判断缓存中是否存储有所述数据请求对应的目标数据,包括:

对所述客户端请求访问的url和请求参数进行哈希运算,获得所述数据请求的hash值,并将所述hash值作为所述数据请求的key值查找环形hash空间中是否映射有所述数据请求的key值,如果是,则判断缓存中存储有所述数据请求对应的目标数据,如果否,则判断缓存中未存储有所述数据请求对应的目标数据,其中,所述环形hash空间中映射有多个数据请求对象的key值。

可选的,所述缓存中包括多个redis节点,所述环形hash空间中映射有所述多个redis节点的key值,则所述从所述缓存中获取所述数据请求对应的目标数据,包括:

确定key值与所述数据请求的key值相差最小且key值位于所述数据请求的key值的顺时针方向的redis节点为目标redis节点;

从所述目标redis节点中获取所述数据请求对应的目标数据。

可选的,如果所述目标redis节点为虚拟节点,则所述从所述目标redis节点中获取所述数据请求对应的目标数据,包括:

确定所述目标redis节点对应的实体节点;

从所述实体节点中获取所述数据请求对应的目标数据。

可选的,如果缓存中未存储有所述数据请求对应的目标数据,则所述方法还包括:

将所述数据请求转发至基础服务层,以由所述基础服务层从数据库中获取所述数据请求对应的目标数据,并将所述目标数据返回给所述上层服务层,以由所述上层服务层将所述目标数据存储至缓存中并将所述目标数据返回给所述客户端。

一种集中管理缓存的装置,包括:

接收单元,用于接收上层服务层转发的数据请求,所述数据请求是由客户端发送至所述上层服务层的;

判断单元,用于判断缓存中是否存储有所述数据请求对应的目标数据;

处理单元,用于如果缓存中存储有所述数据请求对应的目标数据,则从所述缓存中获取所述数据请求对应的目标数据,并将所述目标数据返回给所述上层服务层,以由所述上层服务层将所述目标数据返回给所述客户端。

可选的,所述数据请求包括所述客户端请求访问的统一资源定位符url和请求参数,则所述判断单元具体用于:

对所述客户端请求访问的url和请求参数进行哈希运算,获得所述数据请求的hash值,并将所述hash值作为所述数据请求的key值查找环形hash空间中是否映射有所述数据请求的key值,如果是,则判断缓存中存储有所述数据请求对应的目标数据,如果否,则判断缓存中未存储有所述数据请求对应的目标数据,其中,所述环形hash空间中映射有多个数据请求对象的key值。

可选的,所述缓存中包括多个redis节点,所述环形hash空间中映射有所述多个redis节点的key值,则所述处理单元具体用于:

确定key值与所述数据请求的key值相差最小且key值位于所述数据请求的key值的顺时针方向的redis节点为目标redis节点;

从所述目标redis节点中获取所述数据请求对应的目标数据。

可选的,如果所述目标redis节点为虚拟节点,则所述处理单元具体用于:

确定所述目标redis节点对应的实体节点;

从所述实体节点中获取所述数据请求对应的目标数据。

可选的,如果缓存中未存储有所述数据请求对应的目标数据,则所述处理单元还用于:

将所述数据请求转发至基础服务层,以由所述基础服务层从数据库中获取所述数据请求对应的目标数据,并将所述目标数据返回给所述上层服务层,以由所述上层服务层将所述目标数据存储至缓存中并将所述目标数据返回给所述客户端。

基于上述技术方案,本发明实施例中公开了一种集中管理缓存的方法及装置,包括:接收上层服务层转发的数据请求,所述数据请求是由客户端发送至所述上层服务层的;判断缓存中是否存储有所述数据请求对应的目标数据;如果缓存中存储有所述数据请求对应的目标数据,则从所述缓存中获取所述数据请求对应的目标数据,并将所述目标数据返回给所述上层服务层,以由所述上层服务层将所述目标数据返回给所述客户端。基于上述方法及装置,能够最大化利用化缓存存储空间,减轻服务器和网络带宽的负担,加快服务器对业务请求的响应速度,保证数据一致性,并且做到高可拓展性和鲁棒性。

图1为本发明实施例提供的一种新型的多层服务架构的结构示意图;

图2为本发明实施例提供的一种集中管理缓存的方法的流程示意图;

图3至图8为本发明实施例提供的环形hash空间示意图;

图9为本发明实施例提供的一种集中管理缓存的装置的结构示意图。

附图说明

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

具体实施方式

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

本发明实施例是基于本发明提供的新型的多层服务架构实现的,请参阅附图1,图1为本发明实施例提供的一种新型的多层服务架构的结构示意图,该架构包括基础服务层、上层服务层和redis集中管理框架,其中,基础服务层能够直接访问数据库,上层服务层直接对外提供服务,redis集中管理框架对上层服务层转发的数据请求集中处理,redis集中管理框架还可管理缓存的容量及负载均衡。

请参阅附图2,图2为本发明实施例提供的一种集中管理缓存的方法的流程示意图,该方法的执行主体为多层服务架构中的redis集中管理框架,该方法包括如下步骤:

步骤s100,接收上层服务层转发的数据请求,所述数据请求是由客户端发送至所述上层服务层的;

所述数据请求包括所述客户端请求访问的统一资源定位符url和请求参数。

步骤s110,判断缓存中是否存储有所述数据请求对应的目标数据。

该步骤具体采用如下方式执行:

对所述客户端请求访问的url和请求参数进行哈希运算,获得所述数据请求的hash值,并将所述hash值作为所述数据请求的key值查找环形hash空间中是否映射有所述数据请求的key值,如果是,则判断缓存中存储有所述数据请求对应的目标数据,如果否,则判断缓存中未存储有所述数据请求对应的目标数据,其中,所述环形hash空间中映射有多个数据请求对象的key值。

环形hash空间即一个具有2^32次方个桶的空间,每个桶中均可哈希一个按照常用的hash算法计算的key值,将这些key值头尾相连,即形成一个闭合的环形hash空间,具体如图3所示。

假设object1、object2、object3、object4为4个数据请求对象,将object1、object2、object3、object4四个对象通过特定的hash函数计算出对应的key值,即,hash(object1)=key1;hash(object2)=key2;hash(object3)=key3;hash(object4)=key4;并将key1、key2、key3、key4映射到环形hash空间上的示意图如图4所示。

步骤s120,如果缓存中存储有所述数据请求对应的目标数据,则从所述缓存中获取所述数据请求对应的目标数据,并将所述目标数据返回给所述上层服务层,以由所述上层服务层将所述目标数据返回给所述客户端。

需要说明的是,所述缓存中包括多个redis节点,所述环形hash空间中映射有所述多个redis节点的key值,则所述从所述缓存中获取所述数据请求对应的目标数据,包括:确定key值与所述数据请求的key值相差最小且key值位于所述数据请求的key值的顺时针方向的redis节点为目标redis节点;从所述目标redis节点中获取所述数据请求对应的目标数据。

假设现在有3个redis节点,即node1、node2、node3,通过hash算法得到对应的key值,即,hash(node1)=key1;hash(node2)=key2;hash(node3)=key3;并将key1、key2、key3映射到环形hash空间上的示意图如图5所示。

由图5可以看出,redis节点与数据请求对象的key值处于同一环形hash空间中,这样,按顺时针转动object1存储到了node1中,object3存储到了node2中,object2、object4存储到了node3中。

如果node2出现故障被删除了,那么按照顺时针迁移的方法,object3将会被迁移到node3中,具体如图6所示。

如果新添加一个redis节点node4,那么按照顺时针迁移的方法,object2被迁移到了node4中,具体如图7所示。

如图6所示,object1存储到了node1中,而object2、object3、object4都存储到了node3中,这样就照成了非常不平衡的状态在一致性哈希算法中,为了尽可能的满足平衡性,其引入了虚拟节点。

“虚拟节点”(virtualnode)是实体节点在hash空间的复制品(replica),一个实体节点对应了若干个“虚拟节点”,这个对应个数也成为“复制个数”,“虚拟节点”在hash空间中以hash值排列。以图6为例,以2个副本(复制个数)为例,这样整个hash环中就存在了4个虚拟节点,具体如图8所示。根据图8所示可知,对象的映射关系具体如下:object1->node1-1,object2->node1-2,object3->node3-2,object4->node3-1,很明显,对象的分布比较均衡。

这种情况下,就可能存在确定的目标redis节点为虚拟节点的情况,这种情况下,则所述从所述目标redis节点中获取所述数据请求对应的目标数据,包括:确定所述目标redis节点对应的实体节点;从所述实体节点中获取所述数据请求对应的目标数据。

综上可以看出,通过数据请求的key值就能快速定位到对应的redis节点中,即找到存储有所述数据请求对应的目标数据的存储位置。

本发明实施例中公开了一种集中管理缓存的方法,包括:接收上层服务层转发的数据请求,所述数据请求是由客户端发送至所述上层服务层的;判断缓存中是否存储有所述数据请求对应的目标数据;如果缓存中存储有所述数据请求对应的目标数据,则从所述缓存中获取所述数据请求对应的目标数据,并将所述目标数据返回给所述上层服务层,以由所述上层服务层将所述目标数据返回给所述客户端。基于上述方法,能够最大化利用化缓存存储空间,减轻服务器和网络带宽的负担,加快服务器对业务请求的响应速度,保证数据一致性,并且做到高可拓展性和鲁棒性。

需要说明的是,如果缓存中未存储有所述数据请求对应的目标数据,则上述方法还包括:将所述数据请求转发至基础服务层,以由所述基础服务层从数据库中获取所述数据请求对应的目标数据,并将所述目标数据返回给所述上层服务层,以由所述上层服务层将所述目标数据存储至缓存中并将所述目标数据返回给所述客户端。

请参阅附图9,图9为本发明实施例提供的一种集中管理缓存的装置的结构示意图,该装置包括:

接收单元10,用于接收上层服务层转发的数据请求,所述数据请求是由客户端发送至所述上层服务层的;

判断单元11,用于判断缓存中是否存储有所述数据请求对应的目标数据;

处理单元12,用于如果缓存中存储有所述数据请求对应的目标数据,则从所述缓存中获取所述数据请求对应的目标数据,并将所述目标数据返回给所述上层服务层,以由所述上层服务层将所述目标数据返回给所述客户端。

可选的,所述数据请求包括所述客户端请求访问的统一资源定位符url和请求参数,则所述判断单元具体用于:

对所述客户端请求访问的url和请求参数进行哈希运算,获得所述数据请求的hash值,并将所述hash值作为所述数据请求的key值查找环形hash空间中是否映射有所述数据请求的key值,如果是,则判断缓存中存储有所述数据请求对应的目标数据,如果否,则判断缓存中未存储有所述数据请求对应的目标数据,其中,所述环形hash空间中映射有多个数据请求对象的key值。

可选的,所述缓存中包括多个redis节点,所述环形hash空间中映射有所述多个redis节点的key值,则所述处理单元具体用于:

确定key值与所述数据请求的key值相差最小且key值位于所述数据请求的key值的顺时针方向的redis节点为目标redis节点;

从所述目标redis节点中获取所述数据请求对应的目标数据。

可选的,如果所述目标redis节点为虚拟节点,则所述处理单元具体用于:

确定所述目标redis节点对应的实体节点;

从所述实体节点中获取所述数据请求对应的目标数据。

可选的,如果缓存中未存储有所述数据请求对应的目标数据,则所述处理单元还用于:

将所述数据请求转发至基础服务层,以由所述基础服务层从数据库中获取所述数据请求对应的目标数据,并将所述目标数据返回给所述上层服务层,以由所述上层服务层将所述目标数据存储至缓存中并将所述目标数据返回给所述客户端。

需要说明的是,上述各个装置的具体功能实现已在方法实施例中详细说明,本实施例不再赘述。

综上所述:

本发明实施例中公开了一种集中管理缓存的方法及装置,包括:接收上层服务层转发的数据请求,所述数据请求是由客户端发送至所述上层服务层的;判断缓存中是否存储有所述数据请求对应的目标数据;如果缓存中存储有所述数据请求对应的目标数据,则从所述缓存中获取所述数据请求对应的目标数据,并将所述目标数据返回给所述上层服务层,以由所述上层服务层将所述目标数据返回给所述客户端。基于上述方法及装置,能够最大化利用化缓存存储空间,减轻服务器和网络带宽的负担,加快服务器对业务请求的响应速度,保证数据一致性,并且做到高可拓展性和鲁棒性。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1