著录项信息
专利名称 | 一种缓存多实例数据的方法及装置 |
申请号 | CN201410648574.X | 申请日期 | 2014-11-14 |
法律状态 | 暂无 | 申报国家 | 暂无 |
公开/公告日 | 2015-02-04 | 公开/公告号 | CN104331492A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0;;;G;0;6;F;1;2;/;0;8;;;H;0;4;L;2;9;/;0;6查看分类表>
|
申请人 | 北京国双科技有限公司 | 申请人地址 | 北京市海淀区北四环中路229号海泰大厦4层南401号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京国双科技有限公司 | 当前权利人 | 北京国双科技有限公司 |
发明人 | 郭涛;王鹏 |
代理机构 | 北京中强智尚知识产权代理有限公司 | 代理人 | 杜晶;潘珺 |
摘要
本发明公开了一种缓存多实例数据的方法及装置,首先在服务器端的内存中建立并维护一个活跃实例列表,并仅对存在于所述活跃实例列表中的所有实例的缓存数据进行更新维护;当收到某一实例发来的数据请求时,若在所述活跃实例列表中没有查到该实例,则将该实例的id添加到所述活跃实例列表中,并将对应的时间T设为当前服务器端的时间,且从数据库中查询该实例的数据后返回给该实例对应的客户端。该方法既能够避免使用率不高的缓存数据占用内存空间,也能够尽量减少cpu的开销和不必要的数据库连接,减少数据库的压力。
1.一种缓存多实例数据的方法,其特征在于,在服务器端的内存中维护有活跃实例列表,所述活跃实例列表中至少包括字段:实例id和实例最后一次请求服务器端数据的时间T;
所述方法包括:
当收到某一实例发来的数据请求时,若在所述活跃实例列表中没有查到该实例,则将该实例的id添加到所述活跃实例列表中,并将对应的时间T设为当前服务器端的时间,且从数据库中查询该实例的数据后返回给该实例对应的客户端;并将在缓存中存在,但在所述活跃实例列表中不存在的实例的缓存数据删除;
若在所述活跃实例列表中查找到了该实例,则将该实例的缓存数据返回给该实例对应的客户端,并更新所述活跃实例列表中对应实例的最后请求时间。
2.根据权利要求1所述缓存多实例数据的方法,其特征在于,所述从数据库中查询该实例的数据后返回给该实例对应的客户端后,所述方法还包括:
将从数据库中查询出的该实例的数据放入缓存中。
3.根据权利要求1所述缓存多实例数据的方法,其特征在于,所述方法还包括:
定期对所述活跃实例列表进行更新维护。
4.根据权利要求3所述缓存多实例数据的方法,其特征在于,所述定期对所述活跃实例列表进行更新维护具体为:
定期检查所述活跃实例列表中各实例的最后一次更新时间;
若某一实例的最后一次更新时间和当前时间的差值超过设定的阈值,则判断该实例为不活跃实例,并将该实例从所述活跃实例列表中删除。
5.一种缓存多实例数据的装置,其特征在于,所述装置包括:
活跃实例列表管理单元,用于维护活跃实例列表,所述活跃实例列表中至少包括字段:
实例id和实例最后一次请求服务器端数据的时间T;
数据接收单元,用于接收某一实例发来的数据请求;
实例数据处理单元,用于根据所述数据接收单元接收到的某一实例发送的数据请求在所述活跃实例列表中进行查找处理,具体包括:若在所述活跃实例列表中没有查到该实例,则将该实例的id添加到所述活跃实例列表中,并将对应的时间T设为当前服务器端的时间,且从数据库中查询该实例的数据后返回给该实例对应的客户端;并将在缓存中存在,但在所述活跃实例列表中不存在的实例的缓存数据删除;若在所述活跃实例列表中 查找到了该实例,则将该实例的缓存数据返回给该实例对应的客户端,并更新所述活跃实例列表中对应实例的最后请求时间。
6.如权利要求5所述缓存多实例数据的装置,其特征在于,所述装置还包括:
缓存数据管理单元,用于在所述实例数据处理单元从数据库中查询该实例的数据并返回给该实例对应的客户端后,将从数据库中查询出的该实例的数据放入缓存中。
7.如权利要求5所述缓存多实例数据的装置,其特征在于,
所述活跃实例列表管理单元进一步用于定期对所述活跃实例列表进行更新维护。
8.如权利要求7所述缓存多实例数据的装置,其特征在于,所述活跃实例列表管理单元进一步包括:
更新维护模块,用于定期检查所述活跃实例列表中各实例的最后一次更新时间;若某一实例的最后一次更新时间和当前时间的差值超过设定的阈值,则判断该实例为不活跃实例,并将该实例从所述活跃实例列表中删除。
一种缓存多实例数据的方法及装置\n技术领域\n[0001] 本发明涉及数据处理技术领域,尤其涉及一种缓存多实例数据的方法及装置。\n背景技术\n[0002] 目前,在实时数据监控系统中,客户端需要频繁的查询服务器端数据,通常的方法是,客户端发出查询条件,服务器端接收到查询条件后查询数据库,返回数据结果并传递给客户端。一个服务器端程序服务于多个实例,每个实例都有自己独立的数据库,当多实例并发查询时,一方面因数据库表不断的写入数据,可能会造成读写互锁争抢资源,另一方面在一个应用程序中需要给多个实例提供不同的数据,如果每次客户端的请求都要查询数据库的话,则不论是数据库的压力还是应用程序的压力都非常大。\n[0003] 在现有技术方案中,服务器端定时更新每个实例所需要的缓存,客户端每次请求都直接读取缓存数据,上述方案在实例特别多的情况下,服务器端中缓存的数据也就特别多,这样就造成了服务器端的缓存压力以及不必要的数据库连接。\n发明内容\n[0004] 本发明的目的是提供一种缓存多实例数据的方法及装置,既能够避免使用率不高的缓存数据占用内存空间,也能够尽量减少cpu的开销和不必要的数据库连接,减少数据库的压力。\n[0005] 一种缓存多实例数据的方法,在服务器端的内存中维护有活跃实例列表,所述活跃实例列表中至少包括字段:实例id和实例最后一次请求服务器端数据的时间T;\n[0006] 所述方法包括:\n[0007] 当收到某一实例发来的数据请求时,若在所述活跃实例列表中没有查到该实例,则将该实例的id添加到所述活跃实例列表中,并将对应的时间T设为当前服务器端的时间,且从数据库中查询该实例的数据后返回给该实例对应的客户端;\n[0008] 若在所述活跃实例列表中查找到了该实例,则将该实例的缓存数据返回给该实例对应的客户端,并更新所述活跃实例列表中对应实例的最后请求时间。\n[0009] 所述从数据库中查询该实例的数据后返回给该实例对应的客户端后,所述方法还包括:\n[0010] 将从数据库中查询出的该实例的数据放入缓存中。\n[0011] 所述方法还包括:\n[0012] 定期对所述活跃实例列表进行更新维护。\n[0013] 所述定期对所述活跃实例列表进行更新维护具体为:\n[0014] 定期检查所述活跃实例列表中各实例的最后一次更新时间;\n[0015] 若某一实例的最后一次更新时间和当前时间的差值超过设定的阈值,则判断该实例为不活跃实例,并将该实例从所述活跃实例列表中删除。\n[0016] 在所述将该实例从所述活跃实例列表中删除后,还包括:\n[0017] 将在缓存中存在、但在所述活跃实例列表中不存在的实例的缓存数据删除。\n[0018] 一种缓存多实例数据的装置,所述装置包括:\n[0019] 活跃实例列表管理单元,用于维护活跃实例列表,所述活跃实例列表中至少包括字段:实例id和实例最后一次请求服务器端数据的时间T;\n[0020] 数据接收单元,用于接收某一实例发来的数据请求;\n[0021] 实例数据处理单元,用于根据所述数据接收单元接收到的某一实例发送的数据请求在所述活跃实例列表中进行查找处理,具体包括:若在所述活跃实例列表中没有查到该实例,则将该实例的id添加到所述活跃实例列表中,并将对应的时间T设为当前服务器端的时间,且从数据库中查询该实例的数据后返回给该实例对应的客户端;若在所述活跃实例列表中查找到了该实例,则将该实例的缓存数据返回给该实例对应的客户端,并更新所述活跃实例列表中对应实例的最后请求时间。\n[0022] 所述装置还包括:\n[0023] 缓存数据管理单元,用于在所述实例数据处理单元从数据库中查询该实例的数据并返回给该实例对应的客户端后,将从数据库中查询出的该实例的数据放入缓存中。\n[0024] 所述活跃实例列表管理单元进一步用于定期对所述活跃实例列表进行更新维护。\n[0025] 所述活跃实例列表管理单元进一步包括更新维护模块,用于定期检查所述活跃实例列表中各实例的最后一次更新时间;若某一实例的最后一次更新时间和当前时间的差值超过设定的阈值,则判断该实例为不活跃实例,并将该实例从所述活跃实例列表中删除。\n[0026] 所述更新维护模块还用于:将在缓存中存在、但在所述活跃实例列表中不存在的实例的缓存数据删除。\n[0027] 由上述本发明提供的技术方案可以看出,该方法既能够避免使用率不高的缓存数据占用内存空间,也能够尽量减少cpu的开销和不必要的数据库连接,减少数据库的压力。\n附图说明\n[0028] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。\n[0029] 图1为本发明实施例所提供缓存多实例数据的方法流程示意图;\n[0030] 图2为本发明实施例所提供缓存多实例数据的装置结构示意图。\n具体实施方式\n[0031] 下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。\n[0032] 本发明实施例通过在服务器端的内存中添加活跃实例列表,根据客户端请求服务器端的数据来动态维护该活跃实例列表,且服务器端只对该活跃实例列表中的实例进行数据缓存,避免使用率不高的缓存数据占用内存空间,也能够尽量减少cpu的开销和不必要的数据库连接,减少数据库的压力。下面将结合附图对本发明实施例作进一步地详细描述,图\n1为本发明实施例所提供缓存多实例数据的方法流程示意图,所述方法包括:\n[0033] 步骤11:在服务器端的内存中维护有活跃实例列表,并仅对存在于所述活跃实例列表中的所有实例的缓存数据进行更新维护;\n[0034] 在该步骤中,该活跃实例列表中至少包括如下字段:实例id和实例最后一次请求服务器端数据的时间T。\n[0035] 步骤12:当收到某一实例发来的数据请求时,查找活跃实例列表;\n[0036] 步骤13:若在所述活跃实例列表中没有查到该实例,则将该实例的id添加到所述活跃实例列表中,并将对应的时间T设为当前服务器端的时间,且从数据库中查询该实例的数据后返回给该实例对应的客户端;\n[0037] 在该步骤中,还可以进一步将从数据库中查询出的该实例的数据放入缓存中,从而保证在活跃实例列表中的实例都有对应的缓存数据。\n[0038] 步骤14:若在所述活跃实例列表中查找到了该实例,则将该实例的缓存数据返回给该实例对应的客户端,并更新所述活跃实例列表中对应实例的最后请求时间。\n[0039] 在该步骤中,具体可以利用当前时间来更新最后请求时间,例如使用当前服务器端的时间来更新所述活跃实例列表中对应实例的最后请求时间。\n[0040] 在具体实现中,还可以定期对所述活跃实例列表进行更新维护,具体过程为:\n[0041] 定期检查所述活跃实例列表中各实例的最后一次更新时间;\n[0042] 若某一实例的最后一次更新时间和当前时间的差值超过设定的阈值,则判断该实例为不活跃实例,并将该实例从所述活跃实例列表中删除;\n[0043] 举例来说,可以将阈值设置为12小时,若检查其中一个实例最后一次更新时间为2天前,超过了所设定的阈值,则判断该实例为不活跃实例,那么就将该实例从活跃实例列表中删除,这样就可以一直保持活跃实例列表的有效性,减少服务器端的缓存压力。\n[0044] 且进一步还可以将在缓存中存在、但在所述活跃实例列表中不存在的实例的缓存数据删除,以保证所进行维护的缓存数据都是有用的,将使用率很低的缓存数据清空,以节约内存消耗。\n[0045] 举例来说,假如说有100个实例,其中有20个实例是一直活跃的,比如说一直开着监控客户端时刻查看当前监控数据,另外80个实例不活跃,比如两天登录一次监控客户端,每次查看五分钟,如果没有异常便退出监控系统。在这种场景下,服务器端只需要给20个活跃实例提供数据缓存即可,另外80个实例完全可以不提供缓存,这样就减少了内存开销和cpu的占用,同时另外80个的查询频率很低,对数据库的压力也基本可以忽略。\n[0046] 上述各步骤的操作均可由服务器端或集成于服务器端中的装置来完成。\n[0047] 基于上述的缓存多实例数据的方法,本发明实施例还提供了一种缓存多实例数据的装置,如图2所示为所述装置的结构示意图,所述装置包括:\n[0048] 活跃实例列表管理单元,用于维护活跃实例列表,所述活跃实例列表中至少包括字段:实例id和实例最后一次请求服务器端数据的时间T;\n[0049] 数据接收单元,用于接收某一实例发来的数据请求;\n[0050] 实例数据处理单元,用于根据所述数据接收单元接收到的某一实例发送的数据请求在所述活跃实例列表中进行查找处理,具体包括:若在所述活跃实例列表中没有查到该实例,则将该实例的id添加到所述活跃实例列表中,并将对应的时间T设为当前服务器端的时间,且从数据库中查询该实例的数据后返回给该实例对应的客户端;若在所述活跃实例列表中查找到了该实例,则将该实例的缓存数据返回给该实例对应的客户端,并更新所述活跃实例列表中对应实例的最后请求时间。\n[0051] 具体实现中,所述装置还可包括:\n[0052] 缓存数据管理单元,用于在所述实例数据处理单元从数据库中查询该实例的数据并返回给该实例对应的客户端后,将从数据库中查询出的该实例的数据放入缓存中。\n[0053] 上述活跃实例列表管理单元进一步还可以用于定期对所述活跃实例列表进行更新维护,具体来说,活跃实例列表管理单元可以包括更新维护模块,用于定期检查所述活跃实例列表中各实例的最后一次更新时间;若某一实例的最后一次更新时间和当前时间的差值超过设定的阈值,则判断该实例为不活跃实例,并将该实例从所述活跃实例列表中删除;\n[0054] 更新维护模块还可以用于:将在缓存中存在、但在所述活跃实例列表中不存在的实例的缓存数据删除。\n[0055] 上述装置的具体工作过程如上述方法实施例所述。\n[0056] 综上所述,本发明实施例所述方法既能够避免使用率不高的缓存数据占用内存空间,因为每次更新缓存时需要更新的实例数量少了;也能够尽量减少cpu的开销和不必要的数据库连接,减少数据库的压力。\n[0057] 以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
法律信息
- 2019-06-04
专利权人的姓名或者名称、地址的变更
专利权人由北京国双科技有限公司变更为北京国双科技有限公司
地址由100086 北京市海淀区双榆树小区知春路76号翠宫饭店8层A间变更为100083 北京市海淀区北四环中路229号海泰大厦4层南401号
- 2017-11-21
- 2015-03-11
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201410648574.X
申请日: 2014.11.14
- 2015-02-04
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2013-03-27
|
2012-11-13
| | |
2
| |
2012-09-12
|
2012-04-11
| | |
3
| |
2005-08-24
|
2003-06-25
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |