发明内容
本发明实施例提供一种分布式缓存方法及系统,能够避免元数据的冗余存储,并保证数据访问的一致性。
第一方面,提供了一种分布式缓存方法,该方法包括:根据元数据的主键值确定第一缓存节点,并根据所述元数据的次键值确定第二缓存节点;在所述第一缓存节点中存储中心存储节点下发的所述元数据,在所述第二缓存节点中存储所述元数据的位置索引,所述元数据的位置索引用于指示所述第一缓存节点的地址。
结合第一方面,在第一种实现方式中,具体实现可以为:接收业务处理节点发送的所述元数据的第一查询请求,所述第一查询请求携带查询键值;根据所述查询键值查找所述元数据。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述根据所述查询键值查找所述元数据,具体实现可以为:根据所述查询键值确定目标缓存节点;如果所述目标缓存节点为所述第一缓存节点,在所述目标缓存节点中查找到所述元数据,则将所述元数据发送给所述业务处理节点;如果在所述目标缓存节点中查找到目标位置索引,则向所述业务处理节点发送重定向消息,所述重定向消息携带所述目标位置索引,以便所述业务处理节点根据所述重定向消息判断重定向次数;如果在所述目标缓存节点中未查找到所述元数据和任一元数据的位置索引,则向所述中心存储节点发送所述元数据的第一查询请求。
结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,当所述业务处理节点判断重定向次数小于重定向查询阈值时,具体实现可以为:接收所述业务处理节点根据所述重定向消息发送的所述元数据的第二查询请求;根据所述第二查询请求在与所述目标位置索引对应的缓存节点中查找所述元数据。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述根据所述第二查询请求在与所述目标位置索引对应的缓存节点中查找所述元数据,具体实现可以为:所述目标位置索引为所述元数据的位置索引,将在所述第一缓存节点中查找到的所述元数据发送给所述业务处理节点。
结合第一方面或第一方面的第一种可能的实现方式至第四种可能的实现方式的任一种方式,在第五种可能的实现方式中,具体实现可以为:当所述元数据的存储地址改变时,对所述第二缓存节点中存储的所述元数据的位置索引进行维护,所述元数据的位置索引用于指示改变后的所述元数据的存储地址。
结合第一方面或第一方面的第一种可能的实现方式至第五种可能的实现方式的任一种方式,在第六种可能的实现方式中,所述根据元数据的主键值确定第一缓存节点,并根据所述元数据的次键值确定第二缓存节点,具体实现可以为:根据所述元数据的主键值进行Hash散列得到第一Hash值,并根据所述元数据的次键值进行Hash散列得到第二Hash值,所述第一Hash值与所述第一缓存节点相对应,所述第二Hash值与所述第二缓存节点相对应。
第二方面,提供了分布式缓存系统,该系统包括:确定单元,用于根据元数据的主键值确定第一缓存节点,并根据所述元数据的次键值确定第二缓存节点;所述确定单元确定的所述第一缓存节点,用于存储中心存储节点下发的所述元数据;所述确定单元确定的所述第二缓存节点,用于存储所述元数据的位置索引,所述元数据的位置索引用于指示所述第一缓存节点的地址。
结合第二方面,在第一种可能的实现方式中,所述系统还包括:接收单元,用于接收业务处理节点发送的所述元数据的第一查询请求,所述元数据的第一查询请求携带查询键值;所述确定单元还用于:根据所述查询键值查找所述元数据。
结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述确定单元具体用于:根据所述查询键值确定目标缓存节点;所述系统还包括发送单元,所述发送单元用于:如果所述目标缓存节点为所述第一缓存节点,在所述目标缓存节点中查找到所述元数据,则将所述元数据发送给所述业务处理节点;所述发送单元还用于:如果在所述目标缓存节点中查找到目标位置索引,则向所述业务处理节点发送重定向消息,所述重定向消息携带所述目标位置索引,以便所述业务处理节点根据所述重定向消息判断重定向次数;所述发送单元还用于:如果在所述目标缓存节点中未查找到所述元数据和任一元数据的位置索引,则向所述中心存储节点发送所述元数据的第一查询请求。
结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,当所述业务处理节点判断重定向次数小于重定向查询阈值时,所述接收单元还用于:接收所述业务处理节点根据所述重定向消息发送的所述元数据的第二查询请求;所述确定单元还用于:根据所述第二查询请求在与所述目标位置索引对应的缓存节点中查找所述元数据。
结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述目标位置索引为所述元数据的位置索引,所述确定单元还用于:具体用于:将在所述第一缓存节点中查找到的所述元数据发送给所述业务处理节点。
结合第二方面或第二方面的第一种可能的实现方式至第四种可能的实现方式的任一种方式,在第五种可能的实现方式中,所述确定单元还用于:当所述元数据的存储地址改变时,对所述第二缓存节点中存储的所述元数据的位置索引进行维护,所述元数据的位置索引用于指示改变后的所述元数据的存储地址。
结合第二方面或第二方面的第一种可能的实现方式至第五种可能的实现方式的任一种方式,在第六种可能的实现方式中,所述确定单元具体用于:
根据所述元数据的主键值进行Hash散列得到第一Hash值,并根据所述元数据的次键值进行Hash散列得到第二Hash值,所述第一Hash值与所述第一缓存节点相对应,所述第二Hash值与所述第二缓存节点相对应。
本发明实施例根据元数据的主键值和次键值分别确定第一缓存节点和第二缓存节点,在第一缓存节点中存储中心存储节点下发的元数据,而在第二缓存节点中存储元数据的位置索引,该元数据的位置索引用于指示第一缓存节点的地址。因此,可以通过元数据的位置索引来访问元数据,避免了在多个缓存节点中均存储相同的元数据,从而避免了元数据的冗余存储,节省存储空间,并保证了数据访问的一致性。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明一个实施例的分布式缓存方法的流程图。图1的方法由分布式缓存系统执行。
101,根据元数据的主键值确定第一缓存节点,并根据元数据的次键值确定第二缓存节点。
102,在第一缓存节点中存储中心存储节点下发的元数据,在第二缓存节点中存储元数据的位置索引,元数据的位置索引用于指示第一缓存节点的地址。
本发明实施例根据元数据的主键值和次键值分别确定第一缓存节点和第二缓存节点,在第一缓存节点中存储中心存储节点下发的元数据,而在第二缓存节点中存储元数据的位置索引,该元数据的位置索引用于指示第一缓存节点的地址。因此,可以通过元数据的位置索引来访问元数据,避免了在多个缓存节点中均存储相同的元数据,从而避免了元数据的冗余存储,节省存储空间,并保证了数据访问的一致性。
应理解,本发明的技术方案可以用于基于用户的网络运维系统,还可以用于用户数据存储系统或大量表单数据存储系统等,本发明实施例对此并不限定。
应理解,第一缓存节点和第二缓存节点为不同的缓存节点。第二缓存节点的数目可以是一个或多个,本发明实施例对此并不限定。还应理解,本发明实施例在元数据的多个键值中确定哪个为主键值也不作限定,可选地,可以将查询次数最多的键值确定为主键值。可以将主键值之外的其它键值确定为次键值,应注意,次键值可以是一个或多个,本发明实施例对此并不限定。
可选地,作为一个实施例,在步骤101中,根据元数据的主键值进行Hash(哈希)散列得到第一Hash值,并根据元数据的次键值进行Hash散列得到第二Hash值,第一Hash值与第一缓存节点相对应,第二Hash值与第二缓存节点相对应。下面还将结合图2的例子详细描述本发明实施例。
可选地,作为另一个实施例,在步骤102之后,分布式缓存系统可以接收业务处理节点发送的元数据的第一查询请求,元数据的第一查询请求携带查询键值,根据查询键值查找元数据。
具体而言,分布式缓存系统可以根据查询键值确定目标缓存节点。
如果目标缓存节点为第一缓存节点,则可以在目标缓存节点中查找到元数据,即在第一缓存节点命中元数据。进一步地,向请求方(业务处理节点)回复找到的元数据。
如果在目标缓存节点中未查找到元数据和任一元数据的位置索引,则可以向中心存储节点发送元数据的第一查询请求,以便中心存储节点查找元数据。
如果在目标缓存节点中查找到目标位置索引,则向业务处理节点发送重定向消息,重定向消息携带目标位置索引,可选地,业务处理节点可以设定重定向查询阈值。业务处理节点根据重定向消息判断重定向次数。当业务处理节点重定向查找元数据的次数小于重定向查询阈值时,业务处理节点可以向分布式缓存系统发送第二查询请求,第二查询请求携带与目标位置索引对应的缓存节点的地址。分布式缓存系统可以根据第二查询请求在与目标位置索引对应的缓存节点中查找元数据。在目标位置索引为元数据的位置索引的情况下,分布式缓存系统可以在第一缓存节点中查找到的元数据,进一步地,向业务处理节点回复找到的元数据。当业务处理节点重定向查找元数据的次数大于或等于重定向查询阈值时,业务处理节点可以不再向分布式缓存系统发送查询元数据的请求,即查询失败。因此,业务处理节点通过设定重定向查询元数据最大次数,可以防止发生重定向死循环。
下面还将结合图3的例子详细描述本发明实施例。
可选地,作为另一个实施例,当元数据的存储地址改变时,分布式缓存系统可以对第二缓存节点中存储的元数据的位置索引进行维护,元数据的位置索引用于指示改变后的元数据的存储地址。具体地,当缓存节点的主备倒换时,例如,第一缓存节点(主)出现故障,采用另一个缓存节点(备)作为第一缓存节点,将元数据存储在新的第一缓存节点,对第二缓存节点中存储的元数据的位置索引进行更新,新的元数据的位置索引用于指示新的第一缓存节点的地址。
另外,当元数据修改时,只需对第一缓存节点的元数据进行更新,无需采用全局锁来实现多个缓存节点保存的元数据的一致性,从而降低系统复杂度和处理时延。
图2是本发明一个实施例的确定缓存节点方法的过程的示意性流程图。图2的方法由分布式缓存系统执行。
201,确定与元数据的主键值对应的第一缓存节点。
202,在第一缓存节点中存储元数据。
例如,根据元数据的主键值Key 1进行Hash散列得到第一Hash值Cache1,Cache 1与第一缓存节点相对应,将存储中心存储节点下发的元数据存储在与Cache 1对应的第一缓存节点中。
203,确定与元数据的其它次键值对应的缓存节点。
204,判断次键值对应的缓存节点是否为第一缓存节点。
可选地,当元数据具有多个次键值时,可以逐一地确定次键值对应的缓存节点。
例如,根据元数据的次键值Key 2进行Hash散列得到的Hash值为Cache2,如果Cache 2与第一缓存节点相对应,则结束流程(206)。如果根据元数据的次键值Key 3进行Hash散列得到的Hash值为第二Hash值Cache 3,如果与Cache 3对应的缓存节点不是第一缓存节点,则执行步骤205。
205,在第二缓存节点中存储元数据的位置索引。
例如,在与Cache 3对应的缓存节点(第二缓存节点)中存储元数据的位置索引(Key 3,Cache 1)。
应理解,上述例子仅仅是示例性的,而非要限制本发明的范围。
通过上述方案,可以通过元数据的位置索引来访问元数据,避免了在多个缓存节点中均存储相同的元数据,从而避免了元数据的冗余存储,节省存储空间,并保证了数据访问的一致性。
图3是本发明另一个实施例的元数据查询方法的过程的示意性流程图。图3的方法由分布式缓存系统执行。
301,接收业务处理节点发送的元数据的第一查询请求。第一查询请求携带查询键值。
302,根据查询键值确定目标缓存节点。
可选地,如果根据查询键值确定的目标缓存节点为第一缓存节点,在第一缓存节点查找的元数据,则可以执行步骤303。如果根据查询键值确定的目标缓存节点中查找到目标位置索引,则可以执行步骤304。如果在目标缓存节点中未查找到元数据以及任一元数据的位置索引,则可以执行步骤305。
如何根据查询键值确定目标缓存节点的例子如上所述,此处不再赘述。
303,向业务处理节点返回查找到的元数据。
304,向业务处理节点返回重定向消息,重定向消息携带查找到的目标位置索引。
305,向中心存储节点发送元数据的第一查询请求。
如果在中心存储节点查找到元数据,则可以向业务处理节点返回元数据。
通过上述方案,可以通过元数据的位置索引来访问元数据,避免了在多个缓存节点中均存储相同的元数据,从而避免了元数据的冗余存储,节省存储空间,并保证了数据访问的一致性。
图4是本发明又一个实施例的业务处理节点查询元数据的方法的过程的示意性流程图。图4的方法由业务处理节点执行。
401,向分布式缓存系统发送元数据第一查询请求。
查询元数据是业务处理的基础,业务处理开始时,业务处理节点向分布式缓存系统发送元数据第一查询请求,在第一查询请求中携带查询键值。
402,接收到分布式缓存系统发送的应答消息。
403,判断应答消息的类型。
分布式缓存系统在401步骤接收到第一查询请求,根据第一查询请求查找元数据,分布式缓存系统查找元数据的例子可以参考图3的例子。业务处理节点接收到分布式缓存系统返回的应答消息可以是查找到的元数据或者重定向消息。
可选地,如果应答消息的类型是元数据,则业务处理节点可以进行数据处理(步骤404)。如果应答消息的类型是重定向消息,则可以执行步骤405。
405,业务处理节点提取重定向消息中的目标位置索引。
406,业务处理节点判断重定向查找元数据的次数是否小于重定向查询阈值。
可选地,如果业务处理节点重定向查找元数据的次数小于重定向查询阈值时,例如,业务处理节点查找元数据时,收到重定向消息的次数小于重定向查询阈值2,则可以执行步骤407。如果业务处理节点重定向查找元数据的次数大于或等于重定向查询阈值时,例如,业务处理节点查找元数据时,收到重定向消息的次数大于或等于重定向查询阈值2,业务处理节点可以不再向分布式缓存系统发送查询元数据的请求,即查询失败(步骤408)。
407,业务处理节点向分布式缓存系统发送元数据的第二查询请求。
第二查询请求携带与目标位置索引对应的缓存节点的地址。分布式缓存系统可以根据第二查询请求在与目标位置索引对应的缓存节点中查找元数据。在目标位置索引为元数据的位置索引的情况下,分布式缓存系统可以在第一缓存节点中查找到的元数据,进一步地,业务处理节点可以接收到分布式缓存系统返回的元数据。
因此,业务处理节点通过设定重定向查询元数据最大次数,可以防止发生重定向死循环。
图5是本发明一个实施例的分布式缓存系统的结构框图。分布式缓存系统500包括确定单元501、第一缓存节点502和第二缓存节点503。
确定单元501,用于根据元数据的主键值确定第一缓存节点502,并根据元数据的次键值确定第二缓存节点503。
确定单元501确定的第一缓存节点502,用于存储中心存储节点下发的元数据。
确定单元501确定的第二缓存节点503,用于存储元数据的位置索引,
元数据的位置索引用于指示第一缓存节点502的地址。
本发明实施例根据元数据的主键值和次键值分别确定第一缓存节点和第二缓存节点,在第一缓存节点中存储中心存储节点下发的元数据,而在第二缓存节点中存储元数据的位置索引,该元数据的位置索引用于指示第一缓存节点的地址。因此,可以通过元数据的位置索引来访问元数据,避免了在多个缓存节点中均存储相同的元数据,从而避免了元数据的冗余存储,节省存储空间,并保证了数据访问的一致性。
应理解,第一缓存节点和第二缓存节点为不同的缓存节点。第二缓存节点的数目可以是一个或多个,本发明实施例对此并不限定。
分布式缓存系统500可实现图1至图4的方法中涉及分布式缓存系统的各个步骤,为避免重复,不再详细描述。
可选地,作为一个实施例,确定单元501具体用于:根据元数据的主键值进行Hash散列得到第一Hash值,并根据元数据的次键值进行Hash散列得到第二Hash值,第一Hash值与第一缓存节点相对应,第二Hash值与第二缓存节点相对应。
可选地,作为另一个实施例,分布式缓存系统500还可以包括接收单元504,接收单元504用于接收业务处理节点发送的元数据的第一查询请求,元数据的第一查询请求携带查询键值。确定单元501还用于根据查询键值查找元数据。
进一步地,确定单元501具体用于根据查询键值确定目标缓存节点。分布式缓存系统500还可以包括发送单元505,发送单元505用于:如果目标缓存节点为第一缓存节点,在目标缓存节点中查找到元数据,则将元数据发送给业务处理节点。发送单元505还用于:如果在目标缓存节点中查找到目标位置索引,则向业务处理节点发送重定向消息,重定向消息携带目标位置索引,以便业务处理节点根据重定向消息判断重定向次数。发送单元505还用于:如果在目标缓存节点中未查找到元数据和任一元数据的位置索引,则向中心存储节点发送元数据的第一查询请求,以便中心存储节点根据第一查询请求查找元数据。
再进一步地,当业务处理节点判断重定向次数小于重定向查询阈值时,接收单元504还用于接收业务处理节点根据重定向消息发送的元数据的第二查询请求。确定单元501还用于根据第二查询请求在与目标位置索引对应的缓存节点中查找所述元数据。在目标位置索引为元数据的位置索引的情况下,发送单元505还用于将在第一缓存节点中查找到的元数据发送给业务处理节点。因此,业务处理节点通过设定重定向查询元数据最大次数,可以防止发生重定向死循环。
可选地,作为另一个实施例,确定单元501还用于:当元数据的存储地址改变时,对第二缓存节点中存储的元数据的位置索引进行维护,元数据的位置索引用于指示改变后的元数据的存储地址。
另外,当元数据修改时,只需对第一缓存节点的元数据进行更新,无需采用全局锁来实现多个缓存节点保存的元数据的一致性,从而降低系统复杂度和处理时延。
图6是本发明另一个实施例的分布式缓存系统的示意框图。
本发明实施例进一步给出实现上述方法实施例中各步骤及方法的装置实施例。在该实施例中,系统600主要包括处理器601,第一缓存器602a和至少一个第二缓存器602b。处理器601控制系统600的操作,处理器601还可以称为CPU(Central Processing Unit,中央处理单元)。第一缓存器602a和至少一个第二缓存器602b可以向处理器601提供指令和数据。处理器601,第一缓存器602a和至少一个第二缓存器602b,发射器603以及接收器604通过总线系统610耦合在一起,其中总线系统610除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图中将各种总线都标为总线系统610。
上述本发明实施例揭示的方法可以应用上述的系统600。其中,处理器601可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器601中的硬件的集成逻辑电路或者软件形式的指令完成。
处理器601,用于根据元数据的主键值确定第一缓存器602a,并根据元数据的次键值确定第二缓存器602b。
处理器601确定的第一缓存器602a,用于存储中心存储节点下发的元数据。
处理器601确定的第二缓存器602b,用于存储元数据的位置索引,元数据的位置索引用于指示第一缓存器602a的地址。
本发明实施例根据元数据的主键值和次键值分别确定第一缓存器和第二缓存器,在第一缓存器中存储中心存储节点下发的元数据,而在第二缓存器中存储元数据的位置索引,该元数据的位置索引用于指示第一缓存器的地址。因此,可以通过元数据的位置索引来访问元数据,避免了在多个缓存器中均存储相同的元数据,从而避免了元数据的冗余存储,节省存储空间,并保证了数据访问的一致性。
应理解,第一缓存器和第二缓存器为不同的缓存器。第二缓存器的数目可以是一个或多个,本发明实施例对此并不限定。
分布式缓存系统600可实现图1至图4的方法中涉及分布式缓存系统的各个步骤,为避免重复,不再详细描述。
可选地,作为一个实施例,处理器601具体用于:根据元数据的主键值进行Hash散列得到第一Hash值,并根据元数据的次键值进行Hash散列得到第二Hash值,第一Hash值与第一缓存器602a相对应,第二Hash值与第二缓存器602b相对应。
可选地,作为另一个实施例,接收器604用于接收业务处理节点发送的元数据的第一查询请求,元数据的第一查询请求携带查询键值。处理器601还用于根据查询键值查找元数据。
进一步地,处理器601具体用于根据查询键值确定目标缓存器。发射器603用于:如果目标缓存器为第一缓存器602a,在目标缓存器中查找到元数据,则将元数据发送给业务处理节点。发射器603还用于:如果在目标缓存器中查找到目标位置索引,则向业务处理节点发送重定向消息,重定向消息携带目标位置索引,以便业务处理节点根据重定向消息判断重定向次数。发射器603还用于:如果在目标缓存器中未查找到元数据和任一元数据的位置索引,则向中心存储节点发送元数据的第一查询请求,以便中心存储节点根据第一查询请求查找元数据。
再进一步地,当业务处理节点判断重定向次数小于重定向查询阈值时,接收器604还用于接收业务处理节点根据重定向消息发送的元数据的第二查询请求。处理器601还用于根据第二查询请求在与目标位置索引对应的缓存器中查找所述元数据。在目标位置索引为元数据的位置索引的情况下,发射器603还用于将在第一缓存器602a中查找到的元数据发送给业务处理节点。因此,业务处理节点通过设定重定向查询元数据最大次数,可以防止发生重定向死循环。
可选地,作为另一个实施例,处理器601还用于:当元数据的存储地址改变时,对第二缓存器中存储的元数据的位置索引进行维护,元数据的位置索引用于指示改变后的元数据的存储地址。
另外,当元数据修改时,只需对第一缓存器缓存器602a的元数据进行更新,无需采用全局锁来实现多个缓存器保存的元数据的一致性,从而降低系统复杂度和处理时延。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。