缓存数据更新方法、装置和系统与流程

文档序号:12666671阅读:149来源:国知局
缓存数据更新方法、装置和系统与流程
本发明涉及计算机
技术领域
,特别是涉及一种缓存数据更新方法、装置和系统。
背景技术
:在服务器集群中,当其中一台服务器的对象的属性值发生变更,传统的集群缓存数据更新方法需要在与该服务器对应的缓存中,先将该对象或包含该对象的所有对象集合删除,再将该对象的变更对象以及包含该变更对象的集合保存至上述缓存中。然而,对于传统的缓存数据更新方法,只有先将该对象以及包含该对象的所有对象集合删除,才能将该对象的变更对象以及包含该变更对象的集合保存至缓存中,使得缓存数据的更新效率低。技术实现要素:基于此,有必要针对上述问题,提供一种提高缓存数据更新效率的缓存数据更新方法、装置和系统。一种缓存数据更新方法,所述方法包括:第一服务器检测所含对象的属性值是否发生变更;若所含对象的属性值发生变更,则根据随机函数,生成第一字符串;获取发生属性值变更的对象的对象类型,将本地预存储的第一映射表中与所述对象类型对应的第一当前字符串更新为所述第一字符串;获取第一查询条件,将所述对象类型、所述第一字符串和所述查询条件组合生成第一缓存key;根据所述第一缓存key,将更新对象保存至所述第一缓存中,所述更新对象为与所述发生属性值变更的对象对应的属性值变更后的对象。在其中一个实施例中,在所述第一服务器检测所含对象的属性值是否发生变更之前,还包括:根据对象类型从本地预存储的第一映射表中读取对应的字符串;若读取不到对应的字符串,则根据所述随机函数,生成初始字符串并将所述初始字符串对应保存至所述第一映射表中。在其中一个实施例中,所述根据所述第一缓存key,将更新对象保存至所述第一缓存中,所述更新对象为与所述发生属性值变更的对象对应的属性值变更后的对象,包括:根据所述第一缓存key从所述第一缓存中读取对应的对象;若读取不到对应的对象,则根据所述对象类型和所述第一查询条件,从数据库中获取所述更新对象,所述更新对象为与所述发生属性值变更的对象对应的属性值变更后的对象;根据所述第一缓存key,将获取到的所述更新对象保存至第一缓存中。在其中一个实施例中,在所述获取发生属性值变更的对象的对象类型,将本地预存储的第一映射表中与所述对象类型对应的第一当前字符串更新为所述第一字符串之后,还包括:所述第一服务器将所述第一字符串发送至集群中的第二服务器,使所述第二服务器根据所述第一字符串将所述更新对象保存至第二缓存中。在其中一个实施例中,所述方法还包括:所述第二服务器接收所述第一服务器发送的所述第一字符串,并将本地预存储的第二映射表中的与所述对象类型对应的第二当前字符串更新为接收到的所述第一字符串;所述第二服务器获取第二查询条件;所述第二服务器根据所述对象类型、所述第一字符串和所述第二查询条件生成第二缓存key;所述第二服务器根据所述第二缓存key,将所述更新对象保存至所述第二缓存中。一种缓存数据更新装置,所述装置包括:检测模块,用于检测所含对象的属性值是否发生变更;随机字符串生成模块,用于当所含对象的属性值发生变更时,则根据随机函数,生成第一字符串;字符串更新模块,获取发生属性值变更的对象的对象类型,将本地预存储的第一映射表中与所述对象类型对应的第一当前字符串更新为所述第一字符串;第一缓存key生成模块,用于获取第一查询条件,将所述对象类型、所述第一字符串和所述第一查询条件组合生成第一缓存key;第一缓存写入模块,用于根据所述第一缓存key,将更新对象保存至所述第一缓存中,所述更新对象为与所述发生属性值变更的对象对应的属性值变更后的对象。在其中一个实施例中,所述装置还包括:字符串初始化模块,用于根据对象类型,从本地预存储的第一映射表中读取对应的字符串;若读取不到对应的字符串,则根据所述随机函数,生成初始字符串并将所述初始字符串对应保存至所述第一映射表中。在其中一个实施例中,所述第一缓存写入模块用于根据所述第一缓存key从所述第一缓存中读取对应的对象;若读取不到对应的对象,则根据所述对象类型和所述第一查询条件,从数据库中获取所述更新对象,所述更新对象为与所述发生属性值变更的对象对应的属性值变更后的对象;根据所述第一缓存key,将获取到的所述更新对象保存至第一缓存中。在其中一个实施例中,所述装置还包括:发送模块,用于所述第一服务器将所述第一字符串发送至集群中的第二服务器,使所述第二服务器根据所述第一字符串将所述更新对象保存至第二缓存中。一种缓存数据更新系统,所述系统包括第一服务器和第二服务器:第一服务器,用于检测所含对象的属性值是否发生变更;若所含对象的属性值发生变更,则根据随机函数,生成第一字符串;获取发生属性值变更的对象的对象类型,将本地预存储的第一映射表中与所述对象类型对应的第一当前字符串更新为所述第一字符串;获取第一查询条件,将所述对象类型、所述第一字符串和所述第一查询条件组合生成第一缓存key;根据所述第一缓存key,将更新对象保存至所述第一缓存中,所述更新对象为与所述发生属性值变更的对象对应的属性值变更后的对象;所述第一服务器还用于将所述第一字符串发送至集群中的第二服务器;所述第二服务器,用于接收所述第一服务器发送的所述第一字符串并将本地预存储的第二映射表中的与所述对象类型对应的第二当前字符串更新为接收到的所述第一字符串;获取第二查询条件;根据所述对象类型、所述第一字符串和所述第二查询条件生成所述第二缓存key;根据所述第二缓存key将所述更新对象保存至所述第二缓存中。上述缓存数据更新方法、装置和系统,通过第一服务器检测所含对象的属性值是否发生变更;若所含对象的属性值发生变更,则根据随机函数,生成第一字符串;获取发生属性值变更的对象的对象类型,将本地预存储的第一映射表中与所述对象类型对应的第一当前字符串更新为所述第一字符串;获取第一查询条件,将所述对象类型、所述第一字符串和所述查询条件组合生成第一缓存key;根据所述第一缓存key,将更新对象保存至所述第一缓存中,所述更新对象为与所述发生属性值变更的对象对应的属性值变更后的对象。由于第一缓存key由对象类型、第一字符串和第一查询条件拼接而成,且第一字符串是由随机函数动态生成的,则在将更新对象保存至第一缓存前,第一缓存中不存在包含当前第一字符串的第一缓存key,也就不存在与该第一缓存key相对应的更新对象,则可直接根据第一缓存key,将更新对象保存至第一缓存中。相比于传统的缓存数据更新方法,需要先将发生属性值变更的对象以及包含该对象的所有对象集合删除,才能将该对象的变更对象以及包含该变更对象的集合保存至缓存中,提高了缓存数据更新的效率。附图说明图1为一个实施例中缓存数据更新方法的流程图;图2为一个实施例中映射表中字符串初始化方法的流程图;图3为一个实施例中更新数据写入缓存方法的流程图;图4为另一个实施例中缓存数据更新方法的流程图;图5为一个实施例中缓存数据更新装置的结构框图;图6为另一个实施例中缓存数据更新装置的结构框图;图7为又一个实施例中缓存数据更新装置的结构框图;图8为一个实施例中缓存数据更新系统的结构框图;图9为图4集群中各映射表初始状态的示意图;图10为图4集群中各初始缓存key的示意图;图11为图4集群中映射表更新顺序的示意图;图12为图4集群中各映射表更新后的示意图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。在一个实施例中,如图1所示,提供了一种缓存数据更新方法,该方法以应用于服务器集群进行举例说明,具体包括如下步骤:步骤102,第一服务器检测所含对象的属性值是否发生变更。对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。具体的,本实施例中的对象为业务对象,如货币、账户等。属性是用来描述具体对象的特征,比如货币的属性有汇率,人的属性有姓名、性别和年龄等。本实施例中,第一服务器中的一个应用包括多个对象,第一服务器需要实时检测部署在该第一服务器的应用中的所有这些对象的属性值是否发生变更,如货币的汇率、编码、状态等是否发生变更,账户的密码、开户行等是否发生变更。步骤104,若所含对象的属性值发生变更,则根据随机函数,生成第一字符串。随机函数是产生随机数的函数,为了确保每一次产生的随机数都是唯一的,可以做一些去重复处理,或直接使用UUID(UniversallyUniqueIdentifier,通用唯一识别码)的随机生成方法等。字符串是由数字、字母、下划线组成的一串字符。它是编程语言中表示文本的数据类型。在程序设计中,字符串为符号或数值的一个连续序列,如符号串(一串字符)或二进制数字串(一串二进制数字)。第一服务器会在检测到所包含的对象的属性值发生变更时,根据随机函数生成第一字符串。步骤106,获取发生属性值变更的对象的对象类型,将本地预存储的第一映射表中与对象类型对应的第一当前字符串更新为第一字符串。本实施例中,本地预存储的第一映射表是与第一服务器对应的预先建立的对象类型和字符串的一一对应关系的存储表。第一服务器会获取发生属性值变更的对象的对象类型,根据该第一映射表中的对象类型和字符串之间的一一对应关系,将与获取的该对象类型在第一映射表中对应的第一当前字符串更新为该生成的第一字符串。其中,第一当前字符串指该对象类型在第一映射表中当前对应的字符串。比如,检测到对象类型currency(货币型)的属性“汇率”的值发生变更时,则根据随机函数生成第一字符串379,获取第一映射表中与对象类型currency对应的第一当前字符串为,将第一映射表中与对象类型currency对应的第一当前字符串更新为379。步骤108,获取第一查询条件,将对象类型、第一字符串和第一查询条件组合生成第一缓存key。本实施例中,第一查询条件是对第一服务器中的同一应用的所有对象进行筛选,且筛选结果包括该发生属性值变更的对象的筛选条件。。第一服务器会根据对象类型、第一字符串和第一查询条件组合生成第一缓存key,如表1所示的预定义的缓存key,其中Bostype是发生属性值变更的对象的对象类型,prekey为映射表中与发生属性值变更的对象的对象类型相对应的当前字符串,查询条件是对要查询的对象标识或对象属性值的限定条件,比如,“汇率大于1”即为查询条件。表1Bostypeprekey查询条件第一缓存key是与第一服务器对应的第一缓存的标识,通过第一缓存key,可以在第一缓存中查找与第一缓存key唯一对应的对象或对象集合。例如,对象类型为货币型(即“currency”),第一字符串为“234”,第一查询条件是“汇率大于1”,则第一缓存key为“currency234汇率大于1”,通过该第一缓存key,可在第一缓存中查找到汇率大于1的货币型对象或货币型对象集合。步骤110,根据第一缓存key,将更新对象保存至第一缓存中,更新对象为与发生属性值变更的对象对应的属性值变更后的对象。缓存中是以“key-value”这样的键-值对存储数据的,根据生成的第一缓存key和与之对应的更新对象,可把该更新对象保存至第一缓存中,其中,更新对象为与发生属性值变更的对象对应的属性值变更后的对象。此外,将更新对象保存至第一缓存中,包括将由对象类型和第一查询条件确定的单个更新对象或包含该更新对象的对象集合保存至第一缓存中。本实施例中,第一缓存key由对象类型、第一字符串和第一查询条件组合而成,且第一字符串是由随机函数动态生成的,则在将更新对象保存至第一缓存前,第一缓存中不存在包含当前第一字符串的第一缓存key,也就不存在与该第一缓存key相对应的对象,则可直接根据第一缓存key,将更新对象对应保存至第一缓存中,而不需要先删除第一缓存中原来保存的未发生属性值变更的对象。而传统的缓存数据更新方法,将对象类型和查询条件作为缓存key,因为对象类型和查询条件是不变的,若更新对象直接以同样的缓存key存储到缓存中,对于机器来说,后续在缓存中读取该更新对象或包含该更新对象的对象集合时,难以区分到底应该读取与两个相同缓存key相对应的哪一个对象或包含对象的集合,容易造成读取到脏数据(即属性值更新前的数据),所以需要先将缓存中的与更新对象的对象类型相同的历史数据全部删除,再将更新后的数据写入到缓存中,以确保读取数据的正确性。因此,相比于传统的缓存数据更新方法,本方案提高了缓存数据更新的效率。在一个实施例中,如图2所示,在步骤102之前还包括字符串初始化步骤,具体包括以下步骤:步骤202,根据对象类型从本地预存储的第一映射表中读取对应的字符串。同样的,本地预存储的第一映射表是与第一服务器对应的预先建立的对象类型和字符串的一一对应关系的存储表。所以,在第一映射表中根据对象类型可查找与之对应的唯一字符串。步骤204,若读取不到对应的字符串,则根据随机函数,生成第一初始字符串并将第一初始字符串对应保存至第一映射表中。第一映射表中的与对象类型相对应的字符串在进行初始化之前都是空值,此时读取到的该字符串也为空值。本实施例中,当读取不到对应的字符串时,则利用随机函数生成第一初始字符串,并将该第一初始字符串写入到第一映射表中,从而实现对第一映射表中与对象类型相对应的字符串的初始化。本实施例中,通过利用随机函数生成第一初始字符串,并将该第一字符串保存至与之对应的对象类型的第一映射表中,以完成对第一映射表中与对象类型相对应的字符串的初始化,以免出现取到的字符串为空值,后续无法对该字符串进行更新。在一个实施例中,如图3所示,步骤110包括:步骤1102,根据第一缓存key从第一缓存中读取对应的对象。由于缓存是以“key-value”这样的键-值对存储数据的,所以,根据第一缓存key可从第一缓存中读取与该第一缓存key对应的对象。步骤1104,若读取不到对应的对象,则根据对象类型和第一查询条件,从数据库中获取更新对象,更新对象为与发生属性值变更的对象对应的属性值变更后的对象。当对象的属性值发生了变更,则在当前的第一缓存中读取不到对应的对象,此时需要从数据库中将更新对象的所有属性值读取出来并以对象的形式展现出来。步骤1106,根据第一缓存key,将获取到的更新对象保存至第一缓存中。在从数据库中获取到更新对象后,以具体的“第一缓存key-对象值”这样的键-值对方式存储到第一缓存中。在一个实施例中,如图4所示,提供了另一种缓存数据更新方法,该方法包括:步骤402,第一服务器检测所含对象的属性值是否发生变更。同样的,对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。具体的,本实施例中的对象为业务对象,如货币、账户等。属性是用来描述具体对象的特征,比如货币的属性有汇率,人的属性有姓名、性别和年龄等。本实施例中,第一服务器中的一个应用包括多个对象,第一服务器需要实时检测部署在该第一服务器的应用中的所有这些对象的属性值是否发生变更,如货币的汇率、编码、状态等是否发生变更,账户的密码、开户行等是否发生变更。步骤404,若所含对象的属性值发生变更,则根据随机函数,生成第一字符串。同样的,随机函数是产生随机数的函数,为了确保每一次产生的随机数都是唯一的,可以做一些去重复处理,如使用UUID函数等。步骤406,获取发生属性值变更的对象的对象类型,将本地预存储的第一映射表中与对象类型对应的第一当前字符串更新为第一字符串。本实施例中,本地预存储的第一映射表是与第一服务器对应的预先建立的对象类型和字符串的一一对应关系的存储表。如图9所示,系统在进行初始化的时候,会将部署在第一服务器上的同一应用的所有对象的映射表进行初始化,即根据随机函数生成初始字符串并将该初始字符串存储至第一映射表中,如Server2中,对象类型Currency对应的字符串初始化为“776”,对象类型Account对应的字符串初始化为“339”。若步骤402检测到服务器Server2中的一个货币对象的属性值发生了变更,则再次根据上述随机函数生成第一字符串,如“379”,并将该第一字符串保存至Server2映射表中,如图12所示。步骤408,获取第一查询条件,将对象类型、第一字符串和第一查询条件组合生成第一缓存key。本实施例中,第一查询条件是对象属性值变更前,对第一服务器中的同一应用的所有对象进行筛选,且筛选结果包括该发生属性值变更的对象的筛选条件;第一缓存key是与第一服务器对应的第一缓存的标识,通过第一缓存key,可以在第一缓存中查找与缓存key唯一对应的对象或对象集合。预先定义的缓存key是由对象类型、对象类型对应的字符串以及查询条件组合而成。具体的,此时对象类型是发生属性值变更的对象的对象类型,对象类型对应的字符串是第一字符串,查询条件为当前查询条件(即第一查询条件)。系统进行初始化的时候,集群中各服务器的对应的各初始缓存key如图10所示,各初始缓存key中的字符串从对应的各初始映射表图9中读取,如服务器Server2的对象类型Currency的初始字符串是“776”,再加上初始查询条件如“汇率大于1”,则服务器Server2对应的初始缓存key为“Currency776汇率大于1”;如当前发生变更的对象类型是“Currency”货币型,由步骤406生成的第一字符串是“379”,当前查询条件的“汇率大于1”,则此时的第一缓存key是“Currency379汇率大于1”。步骤410,根据第一缓存key,将更新对象保存至第一缓存中,更新对象为与发生属性值变更的对象对应的属性值变更后的对象。本实施例中,先根据第一缓存key从第一缓存中读取对应的对象,若读取不到对应的对象,则根据对象类型和第一查询条件,从数据库中获取更新对象,更新对象为与发生属性值变更的对象对应的属性值变更后的对象,再根据第一缓存key,将获取到的更新对象以具体的“第一缓存key-更新对象值”这样的键-值对方式存储到第一缓存中。步骤412,第一服务器将第一字符串发送至集群中的第二服务器,使第二服务器根据第一字符串将更新对象保存至第二缓存中。本实施例中,步骤412在步骤406之后以及在步骤414之前执行即可。集群是一组相互独立的服务器组成的以单一系统模式对外提供服务的系统。每个服务器可以运行相同服务的模式来实现负载均衡。本实施例中,集群中第一服务器的某一个对象的属性值发生了变更,在更新了第一映射表中的与该对象的对象类型相对应的字符串后,需要将更新后的字符串(即第一字符串)发送给集群中的第二服务器,以使第二服务器更新第二映射表中的与对象类型相对应的字符串为第一字符串,从而保证集群中所有映射表中的与该对象相对应的字符串的一致性。步骤414,第二服务器接收第一服务器发送的第一字符串,并将本地预存储的第二映射表中的与对象类型对应的第二当前字符串更新为接收到的第一字符串。集群中第二服务器在接收到属性值发生变更的对象所在的第一服务器发送的第一字符串后,需要将第二服务器的本地预存储的第二映射表中的与属性值发生变更的对象的对象类型对应的第二当前字符串更新为接收到的第一字符串,以保证集群中所有映射表中的与该对象相对应的字符串的一致性,从而使得集群中的任一服务器能准确的在对应的缓存中读取更新对象。如图11所示,集群中各映射表的更新顺序为先更新发生属性值变更的对象对应的服务器Server2的映射表中的字符串,再通知集群中的其它服务器对应更新本地预存储的映射表。如图12所示为集群中各映射表更新后的状态,各服务器中对象类型Currency对应的字符串都更新为“379”。步骤416,第二服务器获取第二查询条件,并根据对象类型、第一字符串和第二查询条件生成第二缓存key。同样的,第二查询条件是对象属性值变更前,对第二服务器中的同一应用的所有对象进行筛选,且筛选结果包括该发生属性值变更的对象的筛选条件;第二缓存key是与第二服务器对应的第二缓存的标识,通过第二缓存key,可以在第二缓存中查找与第二缓存key唯一对应的对象或对象集合。步骤418,第二服务器根据第二缓存key,将更新对象保存至第二缓存中。本实施例中,先根据第二缓存key从第二缓存中读取对应的对象,若读取不到对应的对象,则根据对象类型和第二查询条件,从数据库中获取更新对象,更新对象为与发生属性值变更的对象对应的属性值变更后的对象,再根据第二缓存key,将获取到的更新对象以具体的“第二缓存key-更新对象值”这样的键-值对方式存储到第二缓存中。在一个实施例中,若所述发生属性值变更的对象在第一缓存和/或第二缓存中的存储时间达到预设时间预设值,则第一缓存和/或第二缓存将所述发生属性值变更的对象进行回收。本实施例中,通过给缓存中的对象一个存储时间的限制,使得缓存中的发生属性值变更的对象能被及时清理,减轻了缓存空间的压力。本实施例中,集群中第一服务器的某一个对象的属性值发生了变更,在更新了第一映射表中的与该对象的对象类型相对应的字符串后,将更新后的字符串(即第一字符串)发送给集群中的第二服务器,以使第二服务器更新第二映射表中的与对象类型相对应的字符串为第一字符串,保证了集群中所有映射表中的与该对象相对应的字符串的一致性,以便集群中的任一服务器在对应缓存中读取更新对象或包含更新对象的集合时,不会读取到脏数据(即属性值更新前的数据),同时,第一服务器只将第一字符串发送给第二服务器而不是将包含该更新对象的所有缓存key发送给第二服务器,节省了网络资源。在一个实施例中,如图5所示,提供了一种缓存数据更新装置,装置包括:检测模块502,用于第一服务器检测所含对象的属性值是否发生变更。随机字符串生成模块504,用于若所含对象的属性值发生变更,则根据随机函数,生成第一字符串。字符串更新模块506,用于获取发生属性值变更的对象的对象类型,将本地预存储的第一映射表中与对象类型对应的第一初始字符串更新为第一字符串。第一缓存key生成模块508,用于获取第一查询条件,将对象类型、第一字符串和查询条件组合生成第一缓存key。第一缓存写入模块510,用于根据第一缓存key,将更新对象保存至第一缓存中,更新对象为与发生属性值变更的对象对应的属性值变更后的对象。在一个实施例中,第一缓存写入模块510用于根据第一缓存key从第一缓存中读取对应的对象;若读取不到对应的对象,则根据对象类型和第一查询条件,从数据库中获取更新对象;根据第一缓存key,将获取到的更新对象保存至第一缓存中。在一个实施例中,如图6所示,该装置还包括:字符串初始化模块501,用于根据对象类型,从本地预存储的第一映射表中读取对应的字符串;若读取不到对应的字符串,则根据随机函数,生成第一初始字符串并将第一初始字符串对应保存至第一映射表中。在一个实施例中,如图7所示,该装置还包括:发送模块507,用于第一服务器将第一字符串发送至集群中的第二服务器,使第二服务器根据第一字符串将与第二缓存中的更新对象保存至第二缓存中。在一个实施例中,如图8所示,提供了一种缓存数据更新系统,该系统包括:第一服务器802,用于检测所含对象的属性值是否发生变更;若所含对象的属性值发生变更,则根据随机函数,生成第一字符串;获取发生属性值变更的对象的对象类型,将本地预存储的第一映射表中与对象类型对应的第一当前字符串更新为第一字符串;获取第一查询条件,将对象类型、第一字符串和第一查询条件组合生成第一缓存key;根据第一缓存key,将更新对象保存至第一缓存中,更新对象为与发生属性值变更的对象对应的属性值变更后的对象;第一服务器802还用于将第一字符串发送至集群中的第二服务器704;第二服务器804,用于接收第一服务器发送的第一字符串并将本地预存储的第二映射表中的与对象类型对应的第二当前字符串更新为接收到的第一字符串;获取第二查询条件;根据对象类型、第一字符串和第二查询条件生成第二缓存key;根据第二缓存key将更新对象保存至第二缓存中。需要说明的是,本发明各个实施例中的“第一”、“第二”仅用作区分,并不用作对大小、从属、先后顺序等方面的限定。以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1