著录项信息
专利名称 | 一种数据缓存同步方法、服务器和客户端 |
申请号 | CN201510688001.4 | 申请日期 | 2015-10-21 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2016-02-03 | 公开/公告号 | CN105302895A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 浪潮通用软件有限公司 | 申请人地址 | 山东省济南市高新区浪潮路1036号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 浪潮通用软件有限公司 | 当前权利人 | 浪潮通用软件有限公司 |
发明人 | 王延东;孙立新;周祥国 |
代理机构 | 济南信达专利事务所有限公司 | 代理人 | 李世喆 |
摘要
本发明提供一种数据缓存同步方法、服务器和客户端,该数据缓存同步方法应用于服务器中,在所述服务器中保存每一个客户端对应的缓存规则;确定目标客户端,并将所述目标客户端对应的至少一种缓存规则发送给所述目标客户端;确定所述目标客户端需要更新的数据;根据所述目标客户端对应的至少一种缓存规则,将确定出的目标客户端需要更新的数据发送给所述目标客户端,从而提高客户端的缓存效率。
1.一种数据缓存同步方法,其特征在于,应用于客户端,获取并加载至少一种缓存规则;还包括:
根据所述加载的至少一种缓存规则,获取服务器发送的需要更新的数据;
利用获取到的所述需要更新的数据,更新所述客户端中的缓存数据;
进一步包括:确定缓存规则的编号与所述缓存规则的映射关系;
获取所述至少一种缓存规则,包括:根据所述映射关系,提供至少一种缓存规则的编号给所述服务器,并获取所述服务器发送的与所述至少一种缓存规则的编号对应的所述至少一种缓存规则;
和/或,
在所述获取并加载至少一种缓存规则之后,在所述获取服务器发送的需要更新的数据之前,进一步包括:
确定所述缓存数据的版本以及所述至少一种缓存规则中的缓存依赖中的第一权限版本和第一缓存依赖项版本中的任意一个或多个;
将所述缓存数据的版本、所述缓存依赖中的第一权限版本和第一缓存依赖项版本和中的任意一个或多个发送给所述服务器;
所述获取服务器发送的需要更新的数据,包括:当所述服务器确定出缓存数据的版本、所述缓存依赖中的第一权限版本和第一缓存依赖项版本中的任意一个与所述服务器中对应的版本不同时,获取服务器发送的需要更新的数据;
和/或,
在所述获取并加载至少一种缓存规则之后,在所述获取服务器发送的需要更新的数据之前,进一步包括:
判断所述至少一种缓存规则是否已启用,如果是,则根据所述至少一种缓存规则中的存储定义和数据类型,在本地数据库构建缓存数据表,并将缓存数据存储到所述缓存数据表中;
和/或,
在所述获取服务器发送的需要更新的数据之后,在所述更新所述客户端中的缓存数据之前,进一步包括:
接收所述服务器发送的所述缓存数据的更新标志;
判断所述更新标志是All,None或者Increment;
更新所述缓存数据,包括:当所述缓存数据的更新标志为All时,清空缓存数据,并插入所述服务器发送的需要更新的数据;当前所述缓存数据的更新标志为None时,不修改所述缓存数据;当所述缓存数据的更新标志为Increment时,则删除需要更新的缓存字段,并在所述删除需要更新的缓存字段处,插入对应的所述服务器发送的需要更新的数据。
2.一种客户端,其特征在于,包括:
加载单元,用于获取并加载至少一种缓存规则;
获取单元,用于根据所述加载单元加载的至少一种缓存规则,获取外设的服务器发送的需要更新的数据;
更新单元,用于利用所述获取单元获取到的需要更新的数据,更新所述客户端中的缓存数据;
进一步包括:第一确定单元,其中,
所述第一确定单元,用于确定缓存规则的编号与所述缓存规则的映射关系;
所述加载单元,用于根据所述第一确定单元确定的映射关系,提供至少一种缓存规则的编号给所述外设的服务器,并获取所述外设的服务器发送的与所述至少一种缓存规则的编号对应的所述至少一种缓存规则;
和/或,
进一步包括:第二确定单元,其中,
所述第二确定单元,用于确定所述缓存数据的版本以及所述加载单元加载的至少一种缓存规则中的缓存依赖中的第一权限版本和第一缓存依赖项版本中的任意一个或多个;将所述缓存数据的版本、所述缓存依赖中的第一权限版本和第一缓存依赖项版本中的任意一个或多个发送给所述外设的服务器;
所述获取单元,用于当所述外设的服务器确定出缓存数据的版本、所述缓存依赖中的第一权限版本和第一缓存依赖项版本和中的任意一个与所述服务器中对应的版本不同时,获取所述外设的服务器发送的需要更新的数据;
和/或,
进一步包括:第一判断单元和构建单元,其中,
所述第一判断单元,用于判断所述加载单元加载的至少一种缓存规则是否已启用,如果是,触发所述构建单元;
所述构建单元,用于接收到所述第一判断单元的触发时,根据所述至少一种缓存规则中的存储定义和数据类型,在本地数据库构建缓存数据表,并将缓存数据存储到所述缓存数据表中;
和/或,
进一步包括:第二判断单元,其中,
所述第二判断单元,用于接收所述外设的服务器发送的所述缓存数据的更新标志;判断所述更新标志是All,None或者Increment;
所述更新单元,用于当所述第二判断单元判断出缓存数据的更新标志为All时,清空缓存数据,并插入所述服务器发送的需要更新的数据;当所述第二判断单元判断出所述缓存数据的更新标志为None时,不修改所述缓存数据;当所述第二判断单元判断出所述缓存数据的更新标志为Increment时,则删除需要更新的缓存字段,并在所述删除的需要更新的缓存字段处,插入对应的所述服务器发送的需要更新的数据。
一种数据缓存同步方法、服务器和客户端\n技术领域\n[0001] 本发明涉及数据缓存技术领域,特别涉及一种数据缓存同步方法、服务器和客户端。\n背景技术\n[0002] 智能客户端(Smart Client)技术是一种基于互联网(Internet)的富客户端技术。\n由于其可充分利用客户端机器的本地资源,满足用户界面交互的各种个性化需求,并且可提供本地数据缓存、离线应用等强大功能,使得智能客户端在企业管理软件领域应用越来越广泛。\n[0003] 目前,智能客户端的数据缓存方式主要是,服务器将所有数据发送到客户端的隔离存储空间进行存储,针对每一个客户端单独设置对应的缓存规则,客户端从隔离存储空间获取所有数据,其中,这所有数据包含了更新的数据和未更新的数据,根据客户端存在的缓存规则如权限规则等,客户端进行数据筛选和比较,仅将更新的数据替换掉对应的缓存数据。在现有的这种技术中,客户端获取的所有数据的数据量可以达到几兆、数十兆,而更新的数据的数据量很小,也就是说,客户端每次获取较大数据量的数据,而仅需要很小一部分数据进行更新缓存数据,造成了客户端缓存效率较低。\n发明内容\n[0004] 本发明提供一种数据缓存同步方法、服务器和客户端,从而提高客户端的缓存效率。\n[0005] 一种数据缓存同步方法,应用于服务器中,在所述服务器中保存每一个客户端对应的缓存规则;还包括:\n[0006] 确定目标客户端,并将所述目标客户端对应的至少一种缓存规则发送给所述目标客户端;\n[0007] 确定所述目标客户端需要更新的数据;\n[0008] 根据所述目标客户端对应的至少一种缓存规则,将确定出的目标客户端需要更新的数据发送给所述目标客户端。\n[0009] 优选地,所述在所述服务器中保存每一个客户端对应的缓存规则,包括:\n[0010] 定义取数类型、缓存同步策略、客户端存储方式和缓存依赖中的任意一种或多种;\n[0011] 将所述定义封装为缓存元数据;\n[0012] 将所述缓存元数据加载到服务器。\n[0013] 优选地,所述确定所述目标客户端需要更新的数据,包括:\n[0014] 确定缓存数据的版本;\n[0015] 将所述缓存数据版本与服务器中对应的数据版本进行对比;\n[0016] 当所述缓存数据版本与服务器中对应的数据版本不同时,确定所述服务器中对应的数据版本对应的数据为所述目标客户端需要更新的数据。\n[0017] 优选地,所述确定所述目标客户端需要更新的数据,包括:\n[0018] 确定所述目标客户端的取数类型、缓存依赖中的第一权限版本和第一缓存依赖项版本;\n[0019] 根据所述目标客户端的取数类型,实例化对应的同步提供程序;\n[0020] 控制所述同步提供程序获取服务器中对应的第二权限版本和第二缓存依赖项版本;\n[0021] 判断所述第一权限版本和第一缓存依赖项版本分别与所述对应的第二权限版本和所述第二缓存依赖项版本是否完全相同,如果是,则确定所述目标客户端的缓存数据的版本,并根据所述目标客户端的缓存数据的版本,确定所述目标客户端需要更新的数据;否则,发送所述对应的第二权限版本和所述第二缓存依赖项版本对应的数据给所述目标客户端。\n[0022] 优选地,所述根据所述目标客户端对应的至少一种缓存规则,将确定出的目标客户端需要更新的数据发送给所述目标客户端,包括:\n[0023] 根据所述定义的缓存同步策略,设置缓存数据更新标志为All,发送所述缓存数据对应的所有数据给所述目标客户端。\n[0024] 优选地,根据所述定义的缓存同步策略,确定所述缓存数据中各个缓存字段的时间戳;设置缓存数据更新标志为Increment,将所述对应的数据字段的时间戳与所述缓存数据中各个缓存字段的时间戳进行对比,确定所述对应的数据字段的时间戳增量;\n[0025] 利用所述时间戳增量,确定更新数据字段和删除数据字段,并提供所述更新数据字段和删除数据字段给所述目标客户端。\n[0026] 一种数据缓存同步方法,应用于客户端,获取并加载至少一种缓存规则;还包括:\n[0027] 根据所述加载的至少一种缓存规则,获取服务器发送的需要更新的数据;\n[0028] 利用所述获取到的需要更新的数据,更新所述客户端中的缓存数据。\n[0029] 优选地,上述方法进一步包括:确定缓存规则的编号与所述缓存规则的映射关系;\n[0030] 所述获取至少一种缓存规则,包括:根据所述映射关系,提供至少一种缓存规则的编号给所述服务器,并获取所述服务器发送的与所述至少一种缓存规则的编号对应的所述至少一种缓存规则。\n[0031] 优选地,在所述获取并加载至少一种缓存规则之后,在所述获取服务器发送的需要更新的数据之前,进一步包括:\n[0032] 确定所述缓存数据的版本以及所述至少一种缓存规则中的缓存依赖中的第一权限版本和第一缓存依赖项版本中的任意一个或多个;\n[0033] 将所述缓存数据的版本、所述缓存依赖中的第一权限版本和第一缓存依赖项版本和中的任意一个或多个发送给所述服务器;\n[0034] 所述获取服务器发送的需要更新的数据,包括:当所述服务器确定出缓存数据的版本、所述缓存依赖中的第一权限版本和第一缓存依赖项版本中的任意一个与所述服务器中对应的版本不同时,获取服务器发送的需要更新的数据。\n[0035] 优选地,在所述获取并加载至少一种缓存规则之后,在所述获取服务器发送的需要更新的数据之前,进一步包括:\n[0036] 判断所述至少一种缓存规则是否已启用,如果是,则根据所述至少一种缓存规则中的存储定义和数据类型,在本地数据库构建缓存数据表,并将缓存数据存储到所述缓存数据表中。\n[0037] 优选地,在所述获取服务器发送的需要更新的数据之后,在所述更新所述客户端中的缓存数据之前,进一步包括:\n[0038] 接收所述服务器发送的所述缓存数据的更新标志;\n[0039] 判断所述更新标志是All,None或者Increment;\n[0040] 所述更新所述缓存数据,包括:当所述缓存数据的更新标志为All时,清空缓存数据,并插入所述服务器发送的需要更新的数据;当所述当前缓存数据的更新标志为None时,不修改所述缓存数据;当所述缓存数据的更新标志为Increment时,则删除需要更新的缓存字段,并在所述删除的需要更新的缓存字段处,插入对应的所述服务器发送的需要更新的数据。\n[0041] 一种服务器,包括:\n[0042] 缓存组件单元,用于保存外设的每一个客户端对应的缓存规则;\n[0043] 第一发送单元,用于确定外设的目标客户端,并将所述缓存组件单元保存的所述外设的目标客户端对应的至少一种缓存规则发送给所述外设的目标客户端;\n[0044] 确定单元,用于确定所述外设的目标客户端需要更新的数据;\n[0045] 第二发送单元,用于根据所述第一发送单元发送的所述外设的目标客户端对应的至少一种缓存规则,将所述确定单元确定出的外设的目标客户端需要更新的数据发送给所述外设的目标客户端。\n[0046] 优选地,所述缓存组件单元,用于定义取数类型、缓存同步策略、客户端存储方式和缓存依赖中的任意一种或多种;将所述定义封装为缓存元数据;并将所述缓存元数据加载到服务器。\n[0047] 优选地,所述确定单元,用于确定缓存数据的版本;将所述缓存数据版本与服务器中对应的数据版本进行对比;当所述缓存数据版本与服务器中对应的数据版本不同时,确定所述服务器中对应的数据版本对应的数据为所述目标客户端需要更新的数据。\n[0048] 优选地,所述确定单元,用于确定所述目标客户端的取数类型、缓存依赖中的第一权限版本和第一缓存依赖项版本;根据所述目标客户端的取数类型,实例化对应的同步提供程序;控制所述同步提供程序获取服务器中对应的第二权限版本和第二缓存依赖项版本;判断所述第一权限版本和第一缓存依赖项版本分别与所述对应的第二权限版本和所述第二缓存依赖项版本是否相同,如果是,则确定所述目标客户端的缓存数据的版本,并根据所述目标客户端的缓存数据的版本,确定所述目标客户端需要更新的数据;否则,发送所述对应的第二权限版本和所述第二缓存依赖项版本对应的数据给所述目标客户端。\n[0049] 优选地,所述第二发送单元,用于根据所述定义的缓存同步策略,设置缓存数据更新标志为All,发送缓存数据对应的所有数据给所述外设的目标客户端;或者,根据所述定义的缓存同步策略,确定所述缓存数据中各个缓存字段的时间戳;设置缓存数据更新标志为Increment,将所述对应的数据字段的时间戳与所述缓存数据中各个缓存字段的时间戳进行对比,确定所述对应的数据字段的时间戳增量;利用所述时间戳增量,提供更新数据字段和删除数据字段给所述外设的目标客户端。\n[0050] 一种客户端,包括:\n[0051] 加载单元,用于获取并加载至少一种缓存规则;\n[0052] 获取单元,用于根据所述加载单元加载的至少一种缓存规则,获取外设的服务器发送的需要更新的数据;\n[0053] 更新单元,用于利用所述获取单元获取到的需要更新的数据,更新所述客户端中的缓存数据。\n[0054] 优选地,上述客户端,进一步包括:第一确定单元,其中,\n[0055] 所述第一确定单元,用于确定缓存规则的编号与所述缓存规则的映射关系;\n[0056] 所述加载单元,用于根据所述第一确定单元确定的映射关系,提供至少一种缓存规则的编号给所述外设的服务器,并获取所述外设的服务器发送的与所述至少一种缓存规则的编号对应的所述至少一种缓存规则。\n[0057] 优选地,上述客户端,进一步包括:第二确定单元,其中,\n[0058] 所述第二确定单元,用于确定所述缓存数据的版本以及所述加载单元加载的至少一种缓存规则中的缓存依赖中的第一权限版本和第一缓存依赖项版本中的任意一个或多个;将所述缓存数据的版本、所述缓存依赖中的第一权限版本和第一缓存依赖项版本中的任意一个或多个发送给所述外设的服务器;\n[0059] 所述获取单元,用于当所述外设的服务器确定出缓存数据的版本、所述缓存依赖中的第一权限版本和第一缓存依赖项版本和中的任意一个与所述服务器中对应的版本不同时,获取所述外设的服务器发送的需要更新的数据。\n[0060] 优选地,上述客户端,进一步包括:第一判断单元和构建单元,其中,[0061] 所述第一判断单元,用于判断所述加载单元加载的至少一种缓存规则是否已启用,如果是,触发所述构建单元;\n[0062] 所述构建单元,用于接收到所述第一判断单元的触发时,根据所述至少一种缓存规则中的存储定义和数据类型,在本地数据库构建缓存数据表,并将缓存数据存储到所述缓存数据表中。\n[0063] 优选地,上述客户端,进一步包括:第二判断单元,其中,\n[0064] 所述第二判断单元,用于接收所述外设的服务器发送的所述缓存数据的更新标志;判断所述更新标志是All,None或者Increment;\n[0065] 所述更新单元,用于当所述第二判断单元判断出缓存数据的更新标志为All时,清空缓存数据,并插入所述服务器发送的需要更新的数据;当所述第二判断单元判断出所述缓存数据的更新标志为None时,不修改所述缓存数据;当所述第二判断单元判断出所述缓存数据的更新标志为Increment时,则删除需要更新的缓存字段,并在所述删除的需要更新的缓存字段处,插入对应的所述服务器发送的需要更新的数据。\n[0066] 本发明实施例提供了一种数据缓存同步方法、服务器和客户端,在所述服务器中保存每一个客户端对应的缓存规则;通过确定目标客户端,并将所述目标客户端对应的至少一种缓存规则发送给所述目标客户端,使得客户端可根据自身需求从服务器中获取到相应的规则,而避免了为每一个客户端单独设置缓存规则,另外,通过确定所述目标客户端需要更新的数据,实现了在服务器中筛选出对目标客户端需要更新的数据,而无需将服务器中所有的数据发送给客户端,也无需客户端对数据进行筛选和比较,从而提高了客户端的缓存效率。\n附图说明\n[0067] 图1为本发明实施例提供的一种数据缓存同步方法的流程图;\n[0068] 图2为本发明另一实施例提供的一种数据缓存同步方法的流程图;\n[0069] 图3为本发明又一实施例提供的一种数据缓存同步方法的流程图;\n[0070] 图4为本发明另一实施例提供的一种数据缓存同步方法的流程图;\n[0071] 图5为本发明实施例提供的一种服务器的结构示意图;\n[0072] 图6为本发明实施例提供的一种客户端的结构示意图。\n具体实施方式\n[0073] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。\n[0074] 如图1所示,本发明实施例提供一种数据缓存同步方法,应用于服务器中,该数据缓存同步方法可以包括如下步骤:\n[0075] 步骤101:在服务器中保存每一个客户端对应的缓存规则;\n[0076] 步骤102:确定目标客户端,并将目标客户端对应的至少一种缓存规则发送给目标客户端;\n[0077] 步骤103:确定目标客户端需要更新的数据;\n[0078] 步骤104:根据目标客户端对应的至少一种缓存规则,将确定出的目标客户端需要更新的数据发送给目标客户端。\n[0079] 在本发明一个实施例中,为了使缓存规则能够被服务器进行统一管理,步骤101的具体实施方式:定义取数类型、缓存同步策略、客户端存储方式和缓存依赖中的任意一种或多种;将所述定义封装为缓存元数据;将所述缓存元数据加载到服务器。\n[0080] 在本发明一个实施例中,为了使确定需要更新的数据比较快捷,避免数据间直接进行比较,步骤103的具体实施方式:确定缓存数据的版本;将所述缓存数据版本与服务器中对应的数据版本进行对比;当所述缓存数据版本与服务器中对应的数据版本不同时,确定所述服务器中对应的数据版本对应的数据为所述目标客户端需要更新的数据。\n[0081] 在本发明一个实施例中,为了使确定需要更新的数据更加准确,步骤103的具体实施方式:确定所述目标客户端的取数类型、缓存依赖中的第一权限版本和第一缓存依赖项版本;根据所述目标客户端的取数类型,实例化对应的同步提供程序;控制所述同步提供程序获取服务器中对应的第二权限版本和第二缓存依赖项版本;判断所述第一权限版本和第一缓存依赖项版本分别与所述对应的第二权限版本和所述第二缓存依赖项版本是否完全相同,如果是,则确定所述目标客户端的缓存数据的版本,并根据所述目标客户端的缓存数据的版本,确定所述目标客户端需要更新的数据;否则,发送所述对应的第二权限版本和所述第二缓存依赖项版本对应的数据给所述目标客户端。\n[0082] 在本发明一个实施例中,为了使更新数据的方式比较符合客户端的需求,以快速和准确的更新目标客户端中的缓存数据,步骤104的具体实施方式:根据所述定义的缓存同步策略,设置缓存数据更新标志为All,发送所述缓存数据对应的所有数据给所述目标客户端;或者,根据所述定义的缓存同步策略,确定所述缓存数据中各个缓存字段的时间戳;设置缓存数据更新标志为Increment,将所述对应的数据字段的时间戳与所述缓存数据中各个缓存字段的时间戳进行对比,确定所述对应的数据字段的时间戳增量;利用所述时间戳增量,确定更新字段和删除字段,并提供所述更新字段和删除字段给所述目标客户端。\n[0083] 如图2所示,本发明另一实施例以缓存名称为GSPFunc的功能菜单表中的数据为例,展开说明数据缓存同步方法,该方法应用于服务器中,可以包括如下步骤:\n[0084] 步骤201:定义取数类型、缓存同步策略、客户端存储方式和缓存依赖;\n[0085] 在该步骤中,由于本发明实施例缓存名称为GSPFunc的功能菜单表中的数据,那么,取数类型定义为表,除了表之外,取数类型还可以为数据模型和用户自定义,增加了本发明实施例提供的服务器的实用性。另外,表名称:GSPFunc;该表是否为年度表等等都可以进行定义;另外,还可以定义过滤条件以增加数据准确性,对于本发明实施例提及GSPFunc表当其应用于只能客户端时,由于智能客户端只需要缓存winform类型的框架类型,则可定义过滤条件为FormType=’0’,其中,FormType表征框架类型,0表征winform类型框架。\n[0086] 在该步骤中,缓存同步策略的定义与缓存数据的变化量和频率有关系,对于缓存数据变化量较大的可以选择整表同步缓存,即对整个表中所有数据进行替换;对于缓存数据变化量较小的可以选择时间戳增量同步缓存,即只替换掉表中发生变化的字段。由于本发明实施例提及的功能菜单表GSPFunc中缓存数据变化量较小,则选择时间戳增量作为其缓存同步策略。\n[0087] 在该步骤中,存储方式的定义主要包括定义存储路径和缓存名称,本发明实施例定义存储路径:默认路径;缓存表名称:GSPFunc。\n[0088] 在该步骤中,缓存依赖可以根据客户端的需求定义选择字段、数据权限、缓存依赖项等,例如:一个公司的HR和部门经理所拥有的权限不同,其需要获取的数据也不相同,则通过该缓存依赖可以有针对性地为客户端提供与客户端相关的数据。对于本发明实施例的功能菜单表GSPFunc,选择字段:选择GSPFunc表的全部字段;数据权限:无;缓存依赖项:无。\n[0089] 步骤202:将定义的取数类型、缓存同步策略、客户端存储方式和缓存依赖封装为缓存元数据;\n[0090] 下表为缓存元数据的表,可以将该缓存元数据作为一个整体进行保存。\n[0091]\n[0092] 步骤203:将缓存元数据加载到服务器;\n[0093] 步骤204:确定目标客户端,并将目标客户端对应的至少一种缓存规则发送给目标客户端;\n[0094] 客户端可从服务器直接获取针对其自身的缓存规则,例如:一个公司的管理系统对应的缓存规则,其HR的客户端获取的缓存规则与客户经理的客户端获取的缓存规则不同,另外,在该步骤中所提及的缓存规则即为定义的取数类型、缓存同步策略、客户端存储方式和缓存依赖。\n[0095] 步骤205:确定目标客户端的取数类型、缓存依赖中的第一权限版本和第一缓存依赖项版本;\n[0096] 由于数据发生变化将导致数据对应的版本也相应的变化,那么通过对比版本可以很直观的判断数据是否发生变化,例如:一个公司HR与客户经理对应的权限版本和缓存依赖项版本就有所差异,那么,当HR成为客户经理时,其客户端中权限版本和缓存依赖项版本仍然是职级为HR的版本,如果其更改为客户经理对应的版本则需要更新数据,那么,通过版本可以直接确定出数据是否需要更新。\n[0097] 该步骤具体实现过程:目标客户端将取数类型、缓存依赖中的第一权限版本和第一缓存依赖项版本形成同步上文信息,并将这同步上下文信息发送给服务器,服务器从同步上下文信息中解析出取数类型、缓存依赖中的第一权限版本和第一缓存依赖项版本。\n[0098] 步骤206:根据目标客户端的取数类型,实例化对应的同步提供程序;\n[0099] 步骤207:控制同步提供程序获取服务器中对应的第二权限版本和第二缓存依赖项版本;\n[0100] 步骤208:判断第一权限版本和第一缓存依赖项版本分别与对应的第二权限版本和第二缓存依赖项版本是否完全相同,如果是,则执行步骤209;否则执行步骤210;\n[0101] 在该步骤中,主要是同步提供程序将服务器中的第二权限版本与同步上下文信息中第一权限版本进行对比,将服务器中的第二缓存依赖项版本与同步上下文信息中第一缓存依赖项版本进行对比。\n[0102] 步骤209:确定缓存数据的版本,并执行步骤211;\n[0103] 在该步骤中,也是在同步上下文信息中解析出缓存数据的版本。\n[0104] 步骤210:发送对应的第二权限版本和第二缓存依赖项版本对应的数据给目标客户端,并结束当前流程;\n[0105] 例如:一个公司的HR变为客户经理时,其客户端的权限版本和缓存依赖项版本势必要发生变化,而不同权限版本和缓存依赖项版本对应的数据差异性和变化量较大,那么,在该步骤中可以利用定义的缓存同步策略中的整表更新更新表中所有的数据,可以快速更新数据。\n[0106] 值得说明的是,本发明实施例中提及的功能菜单表GSPFunc其权限和缓存依赖项均没有定义,则对于这种权限和缓存依赖项均没有定义的客户端来说,服务器在执行完步骤206之后,可以忽略步骤207、步骤208和步骤210,而直接执行步骤209。\n[0107] 步骤211:判断缓存数据版本与服务器中对应的数据版本是否相同,如果是,则执行步骤212;否则,执行步骤213;\n[0108] 步骤212:不更新缓存数据,并结束当前流程;\n[0109] 步骤213:设置缓存数据更新标志为Increment;\n[0110] 该步骤中设置的更新标志主要是为了明确告知客户端程序应采用何种策略进行更新,避免引发不一致的错误。在前面已提及缓存同步策略主要有两种,由于本实施例的GSPFunc表中数据变化量不大,选择时间戳增量的方式更新缓存数据。对于整表更新数据的缓存同步策略来说,可以设置更新标志为All;而对于如果未发生变化的数据,则可以设置更新标志为None。\n[0111] 步骤214:确定缓存数据中各个缓存字段的时间戳;\n[0112] 步骤215:将对应的数据字段的时间戳与缓存数据中各个缓存字段的时间戳进行对比,确定对应的数据字段的时间戳增量;\n[0113] 例如:某一数据字段被修改过,那么该数据字段在服务器中的时间戳即为其修改的时间,那么,客户端中与该数据字段对应的缓存数据字段的时间戳就与该数据字段在服务器中的时间戳产生了时间差即为时间戳增量。\n[0114] 步骤216:利用时间戳增量,确定更新数据字段和删除数据字段,并提供更新字段和删除字段给目标客户端。\n[0115] 对于产生了时间戳增量的数据字段即为被修改过的数据字段,那么,仅将这发生变化的数据字段发送给目标客户端,而对于被删处的数据字段可通过一定的标记标识出,以使客户端根据这标识删除相应的缓存数据字段。\n[0116] 在该步骤中,提供提供更新字段和删除字段给目标客户端的方式主要是,将相应的数据、服务器端的版本信息以及增量更新标志等同步到同步上下文信息中,然后将该同步上下文信息压缩返回到客户端通过压缩的方式可以有利于降低在网络上的传输数据量,增强了程序在低带宽下的适应能力。\n[0117] 如图3所示,本发明又一实施例提供一种数据缓存同步方法,应用于客户端,该方法可以包括如下步骤:\n[0118] 步骤301:获取并加载至少一种缓存规则;\n[0119] 步骤302:根据加载的至少一种缓存规则,获取服务器发送的需要更新的数据;\n[0120] 步骤303:利用获取到的需要更新的数据,更新客户端中的缓存数据。\n[0121] 在本发明一个实施例中,为了能够便捷的获取到缓存规则,该方法进一步包括:确定缓存规则的编号与所述缓存规则的映射关系;步骤301的具体实施方式:根据所述映射关系,提供至少一种缓存规则的编号给所述服务器,并获取所述服务器发送的与所述至少一种缓存规则的编号对应的所述至少一种缓存规则。\n[0122] 在本发明一个实施例中,为了提高获取服务器发送的需要更新的数据的效率和准确性,在步骤301之后,在步骤302之前,进一步包括:确定所述缓存数据的版本以及所述至少一种缓存规则中的缓存依赖中的第一权限版本和第一缓存依赖项版本中的任意一个或多个;将所述缓存数据的版本、所述缓存依赖中的第一权限版本和第一缓存依赖项版本和中的任意一个或多个发送给所述服务器;步骤302的具体实施方式:当所述服务器确定出缓存数据的版本、所述缓存依赖中的第一权限版本和第一缓存依赖项版本和中的任意一个与所述服务器中对应的版本不同时,获取服务器发送的需要更新的数据。\n[0123] 在本发明一个实施例中,为了能够保证缓存规则启用,以顺利完成缓存同步,在步骤301之后,在步骤302之前,进一步包括:判断所述至少一种缓存规则是否已启用,如果是,则根据所述至少一种缓存规则中的存储定义和数据类型,在本地数据库构建缓存数据表,并将缓存数据存储到所述缓存数据表中。\n[0124] 在本发明一个实施例中,为了保证更新数据的正确性和准确性,在步骤302之后,在步骤303之前,进一步包括:接收所述服务器发送的所述缓存数据的更新标志;判断所述更新标志是All,None或者Increment;步骤303的具体实施方式:当所述缓存数据的更新标志为All时,清空缓存数据,并插入所述服务器发送的需要更新的数据;当所述当前缓存数据的更新标志为None时,不修改所述缓存数据;当所述缓存数据的更新标志为Increment时,则删除需要更新的缓存字段,并在所述删除的需要更新的缓存字段处,插入对应的所述服务器发送的需要更新的数据。\n[0125] 如图4所示,本发明另一实施例提供一种数据缓存同步方法,应用于客户端,该方法可以包括如下步骤:\n[0126] 步骤400:确定缓存规则的编号与缓存规则的映射关系;\n[0127] 在服务器定义缓存规则过程中,各个缓存规则都存在对应的编号,该步骤主要在客户端存储缓存规则的编号与缓存规则的对应关系,那么,在后续步骤中,客户端仅需要提供编号,就可以获取到编号对应的缓存规则。\n[0128] 步骤401:根据映射关系,提供至少一种缓存规则的编号给服务器;\n[0129] 步骤402:获取服务器发送的与至少一种缓存规则的编号对应的至少一种缓存规则;\n[0130] 步骤403:判断至少一种缓存规则是否已启用,如果是,则执行步骤404;否则,执行步骤405;\n[0131] 由于缓存规则可以根据需求启用或关闭,那么,当客户端想要缓存数据之前,首先就要通过该步骤察看客户端中缓存规则是否启用,只有启用才能进行后续的缓存同步。\n[0132] 步骤404:根据至少一种缓存规则中的存储定义和数据类型,在本地数据库构建缓存数据表,并将缓存数据存储到缓存数据表中,并执行步骤406;\n[0133] 定义的缓存规则包括:取数类型、缓存同步策略、客户端存储方式和缓存依赖中的任意一种或多种。例如对于功能菜单表GSPFunc,为其定义的缓存规则为:取数类型定义为表;表名称:GSPFunc;过滤条件为FormType=’0’,其中,FormType表征框架类型,0表征winform类型框架;选择时间戳增量同步缓存;存储路径:默认路径;缓存表名称:GSPFunc;\n选择字段:选择GSPFunc表的全部字段;数据权限:无;缓存依赖项:无。\n[0134] 步骤405:启用上述至少一种缓存规则;\n[0135] 步骤406:确定缓存数据的版本以及第一权限版本和第一缓存依赖项版本;\n[0136] 在该步骤中,第一权限版本和第一缓存依赖项版本来源于缓存依赖中。\n[0137] 步骤407:将缓存数据的版本、第一权限版本和第一缓存依赖项版本发送给服务器;\n[0138] 在该步骤中,客户端将缓存数据的版本、第一权限版本和第一缓存依赖项版本存储到同步上下文信息,通过将同步上下文信息发送给服务器来实现该步骤。另外还可以将缓存同步方式如整表更新或者时间戳更新方式也通过同步上下文信息一同发送给服务器。\n[0139] 步骤408:当服务器确定出缓存数据的版本、第一权限版本和第一缓存依赖项版本中的任意一个与服务器中对应的版本不同时,获取服务器发送的需要更新的数据;\n[0140] 在该步骤中,服务器通过将更新的数据加载到同步上下文信息中,并将同步上下文信息压缩打包发送给客户端,客户端通过解压压缩包获取到同步上下文信息,从中解析出需要更新的数据。\n[0141] 步骤409:接收服务器发送的缓存数据的更新标志;\n[0142] 只有当服务器中的版本和客户端中的版本不同时,才确定缓存数据需要更新。通过该步骤中的更新标志,客户端判断出是何种更新方式,例如:对于服务器中的权限版本和缓存依赖项版本与客户端中的权限版本和缓存依赖项版本不同时,数据变化量较大,可以选择整表更新的方式来更新缓存数据,此时,更新标志设置为All;对于数据变化量不大的缓存表来说,可以通过时间戳的方式来更新缓存数据,此时,更新标志设置为Increment;对于不需要更新的缓存数据,更新标志设置为None。\n[0143] 步骤410:判断更新标志是All,None或者Increment,当更新标志是All时,执行步骤411;当更新标志是None时,执行步骤412;当更新标志是Increment时,执行步骤413;\n[0144] 步骤411:清空缓存数据,并插入所述服务器发送的需要更新的数据,并结束当前流程;\n[0145] 该种方式主要适用于数据更新量较大的缓存数据,例如:对于表中的缓存数据来说,则可以通过整体删除表中所有的缓存数据,并将从服务器中获取到的数据插入表中。\n[0146] 步骤412:不修改缓存数据,并结束当前流程;\n[0147] 步骤413:删除需要更新的缓存字段,并在删除的需要更新的缓存字段处,插入对应的服务器发送的需要更新的数据。\n[0148] 例如:对于一段数据,仅对数据中某一段字段进行了修改,则通过删除这修改字段对应的缓存字段,然后将这修改的字段插入相应的位置;如果对于一段数据,服务器中删除了其中的一段字段,则对该删除的一段字段以标记的方式使客户端获取到,客户端就可以根据这标记删除对应的字段,实现缓存更新。\n[0149] 如图5所示,本发明实施例提供一种服务器,该服务器包括:\n[0150] 缓存组件单元501,用于保存外设的每一个客户端对应的缓存规则;\n[0151] 第一发送单元502,用于确定外设的目标客户端,并将缓存组件单元501保存的外设的目标客户端对应的至少一种缓存规则发送给外设的目标客户端;\n[0152] 确定单元503,用于确定所述外设的目标客户端需要更新的数据;\n[0153] 第二发送单元504,用于根据第一发送单元502发送的所述外设的目标客户端对应的至少一种缓存规则,将确定单元503确定出的外设的目标客户端需要更新的数据发送给外设的目标客户端。\n[0154] 在本发明又一个实施例中,缓存组件单元501,用于定义取数类型、缓存同步策略、客户端存储方式和缓存依赖中的任意一种或多种;将定义封装为缓存元数据;并将缓存元数据加载到服务器。\n[0155] 在本发明另一实施例中,确定单元503,用于确定缓存数据的版本;将缓存数据版本与服务器中对应的数据版本进行对比;当缓存数据版本与服务器中对应的数据版本不同时,确定服务器中对应的数据版本对应的数据为目标客户端需要更新的数据。\n[0156] 在本发明另一实施例中,确定单元503,用于确定目标客户端的取数类型、缓存依赖中的第一权限版本和第一缓存依赖项版本;根据目标客户端的取数类型,实例化对应的同步提供程序;控制同步提供程序获取服务器中对应的第二权限版本和第二缓存依赖项版本;判断第一权限版本和第一缓存依赖项版本分别与对应的第二权限版本和第二缓存依赖项版本是否相同,如果是,则确定目标客户端的缓存数据的版本,并根据目标客户端的缓存数据的版本,确定目标客户端需要更新的数据;否则,发送对应的第二权限版本和第二缓存依赖项版本对应的数据给目标客户端。\n[0157] 在本发明另一实施例中,第二发送单元504,用于根据缓存组件单元501定义的缓存同步策略,设置缓存数据更新标志为All,发送缓存数据对应的所有数据给外设的目标客户端;或者,根据缓存组件单元501定义的缓存同步策略,确定缓存数据中各个缓存字段的时间戳;设置缓存数据更新标志为Increment,将对应的数据字段的时间戳与缓存数据中各个缓存字段的时间戳进行对比,确定对应的数据字段的时间戳增量;利用时间戳增量,提供更新数据字段和删除数据字段给外设的目标客户端。\n[0158] 如图6所示,本发明实施例提供一种客户端,该客户端包括:\n[0159] 加载单元601,用于获取并加载至少一种缓存规则;\n[0160] 获取单元602,用于根据加载单元601加载的至少一种缓存规则,获取外设的服务器发送的需要更新的数据;\n[0161] 更新单元603,用于利用获取单元602获取到的需要更新的数据,更新客户端中的缓存数据。\n[0162] 在本发明又一实施例中,上述客户端,进一步包括:第一确定单元(图中未示出),其中,\n[0163] 第一确定单元,用于确定缓存规则的编号与缓存规则的映射关系;\n[0164] 加载单元601,用于根据第一确定单元确定的映射关系,提供至少一种缓存规则的编号给外设的服务器,并获取外设的服务器发送的与至少一种缓存规则的编号对应的至少一种缓存规则。\n[0165] 在本发明另一实施例中,上述客户端,进一步包括:第二确定单元(图中未示出),其中,\n[0166] 第二确定单元,用于确定缓存数据的版本以及加载单元601加载的至少一种缓存规则中的缓存依赖中的第一权限版本和第一缓存依赖项版本中的任意一个或多个;将缓存数据的版本、缓存依赖中的第一权限版本和第一缓存依赖项版本中的任意一个或多个发送给外设的服务器;\n[0167] 获取单元602,用于当外设的服务器确定出缓存数据的版本、缓存依赖中的第一权限版本和第一缓存依赖项版本和中的任意一个与服务器中对应的版本不同时,获取外设的服务器发送的需要更新的数据。\n[0168] 在本发明另一实施例中,上述客户端,进一步包括:第一判断单元和构建单元(图中未示出),其中,\n[0169] 第一判断单元,用于判断加载单元601加载的至少一种缓存规则是否已启用,如果是,触发构建单元;\n[0170] 构建单元,用于接收到第一判断单元的触发时,根据至少一种缓存规则中的存储定义和数据类型,在本地数据库构建缓存数据表,并将缓存数据存储到缓存数据表中。\n[0171] 在本发明另一实施例中,上述客户端,进一步包括:第二判断单元(图中未示出),其中,\n[0172] 第二判断单元,用于接收外设的服务器发送的缓存数据的更新标志;判断所述更新标志是All,None或者Increment;\n[0173] 更新单元603,用于当第二判断单元判断出缓存数据的更新标志为All时,清空缓存数据,并插入所述服务器发送的需要更新的数据;当第二判断单元判断出缓存数据的更新标志为None时,不修改缓存数据;当第二判断单元判断出缓存数据的更新标志为Increment时,则删除需要更新的缓存字段,并在删除的需要更新的缓存字段处,插入对应的服务器发送的需要更新的数据。\n[0174] 本发明实施例提供的方案,至少能够达到如下有益效果:\n[0175] 1.通过在服务器中保存每一个客户端对应的缓存规则;确定目标客户端,并将所述目标客户端对应的至少一种缓存规则发送给所述目标客户端,使得客户端可根据自身需求从服务器中获取到相应的规则,而避免了为每一个客户端单独设置缓存规则,另外,通过确定所述目标客户端需要更新的数据,实现了在服务器中筛选出对目标客户端需要更新的数据,而无需将服务器中所有的数据发送给客户端,也无需客户端对数据进行筛选和比较,从而提高了客户端的缓存效率。\n[0176] 2.通过定义取数类型、缓存同步策略、客户端存储方式和缓存依赖中的任意一种或多种;将所述定义封装为缓存元数据;将所述缓存元数据加载到服务器,该过程中的缓存元数据可根据客户需求进行定义、配置和扩展,使得应用程序可以根据实际情况灵活配置,提高了缓存数据的自动化。另外,定义时,可以增加过滤条件、可以选择字段列表、也可以设置数据权限,这就从多个维度上保证了用户更新缓存数据时仅需要同步用户实际使用到的数据,从而提高数据的更新效率。\n[0177] 3.由于客户端缓存数据的规则是从服务器中获取,而无需人工或代码干预,同时,客户端缓存数据的同步过程对客户程序完全透明,完全自动化,减少了人工操作,降低了开发成本。\n[0178] 4.本发明实施例支持多种同步策略、存储方式的灵活配置,可以根据缓存数据的更新数量和存储方式,选择不同的同步策略进行缓存同步,能更好的适应不同的应用场景。\n另外,同步数据传输过程中增加了压缩处理,进一步降低了在传输过程中的数据量,提高了传输效率。\n[0179] 5.通过判断客户端提供的缓存数据版本、第一权限版本和第一缓存依赖项版本与服务器中对应的数据版本、第二权限版本和第二缓存依赖项版本是否完全相同,来确定需要更新的数据,由于数据发生变化时,对应的版本也将发生变化,那么,通过这一判断过程可以比较快捷确定需要更新的数据,而通过对比数据版本、权限版本和缓存依赖项版本可以提高确定需要更新的数据更加准确。\n[0180] 需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个〃〃〃〃〃〃”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。\n[0181] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
法律信息
- 2018-11-27
- 2016-03-02
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201510688001.4
申请日: 2015.10.21
- 2016-02-03
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2006-09-20
|
2006-04-21
| | |
2
| |
2013-12-11
|
2013-08-14
| | |
3
| |
2010-12-29
|
2010-08-09
| | |
4
| |
2014-05-21
|
2012-11-15
| | |
5
| |
2015-04-29
|
2015-01-30
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |