分布式缓存同步系统及方法

文档序号:7612473阅读:136来源:国知局
专利名称:分布式缓存同步系统及方法
技术领域
本发明涉及一种分布式缓存同步系统及方法。
背景技术
随着电信业务的迅猛发展,为电信行业公司的IT系统带来巨大压力。数据读取效率问题就突出出来。如BOSS (Business & Operation Support System,业务运营支撑系统)系统响应慢、系统不可用,对客户的满意度及应用中的问题无法及时获知和改进等。所以研发出可以高效配置,提高访问数据的速度,降低系统消耗的方法也就成了
一种必然需要。

发明内容
针对以上所述的数据读取的效率问题,本发明提供一种分布式缓存同步系统及方法。本发明解决上述技术问题的技术方案如下一种分布式系统缓存同步的方法,它包括以下步骤
步骤1 将每台服务器数据库中所需数据进行缓存;
步骤2 当一台服务器缓存数据发生变化时,将该服务器中发生变动的数据,组装成数据包;
步骤3 该服务器将数据包分发给其他服务器;
步骤4 其他服务器接收所述数据包,再将数据包转化成所述发生变动的数据; 步骤5 其他服务器将所述发生变动的数据进行缓存。进一步的,步骤1包括以下子步骤
步骤1. 1 在每台服务器上构造用于在内存中存储的域,即将要进行缓存的数据库数据按需求划分成值对象,以值对象的包名加类名组成缓存中的唯一域;
步骤1. 2 将数据库中的记录读出,并将其构造成实体类,且数据库中的每一条记录对应成一个实体类;
步骤1. 3 将实体类以Map的键值对方式存放入域中,其中Key为主键,Value值为对应的实体类。进一步的,步骤2中每台服务器配置了 Listener (Listener是krvlet (Servlet 是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。)的监听器,它可以监听客户端的请求、服务端的操作等),当一台服务器缓存数据发生变化时,Listener同时分发请求到其他服务器。进一步的,步骤2中服务器通过反射机制将发生变动的数据转化成Map结构的数据包。进一步的,步骤3为该服务器通过xmlrpc方式,将数据包分发给其他服务器。一种分布式系统缓存同步系统,它包括多台服务器,所述每台服务器包括缓存单元,将数据库中所需数据进行缓存;
监听单元,监听作为接收端的其他服务器的请求或作为发送端的服务器的操作; 转化单元,将服务器中发生变动的缓存数据转化成数据包,或将数据包转化成发生变动的数据;
传输单元,将所述数据包传输至其他服务器。进一步的,它还包括应急加载缓存接口,当某台服务器当机时,所述应急加载缓存接口重新加载缓存数据,同时保证与其他服务器的正常通信。本发明的有益效果是
1.降低对数据库访问次数,一次读取数据库存入缓存,可以接受无数次访问,接受数据库资源。2.读取缓存的速度大大高于读取文件和数据库,大大提高读取速度。3.分布式的支持,可以使大型高并发系统采用缓存成为可能。


图1为本发明分布式缓存同步方法的流程图; 图2为本发明分布式缓存同步系统的结构框图。
具体实施例方式以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。如图1所示,一种分布式系统缓存同步的方法,它包括以下步骤 步骤1 将每台服务器数据库中所需数据进行缓存;
步骤2 当一台服务器缓存数据发生变化时,将该服务器中发生变动的数据,组装成数据包;
步骤3 该服务器将数据包分发给其他服务器;
步骤4 其他服务器接收所述数据包,再将数据包转化成所述发生变动的数据; 步骤5 其他服务器将所述发生变动的数据进行缓存。步骤1包括以下子步骤
步骤1. 1 在每台服务器上构造用于在内存中存储的域,即将要进行缓存的数据库数据按需求划分成值对象,以值对象的包名加类名组成缓存中的唯一域;
步骤1. 2 将数据库中的记录读出,并将其构造成实体类,且数据库中的每一条记录对应成一个实体类;
步骤1. 3 将实体类以Map的键值对方式存放入域中,其中Key为主键,Value值为对应的实体类。步骤2为每台服务器配置了 Listener,当一台服务器缓存数据发生变化时, Listener同时分发请求到其他服务器,并且该服务器通过反射机制(反射机制,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力)将发生变动的数据转化成Map (Map,将键映射到值的对象)结构的数据包。步骤3为该服务器通过xmlrpc (xmlrpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据)方式,将数据包分发给其他服务器。如图2所示,一种分布式系统缓存同步系统,它包括多台服务器1,所述每台服务器1包括
缓存单元3,将数据库中所需数据进行缓存;
监听单元6,监听作为接收端的其他服务器的请求或作为发送端的服务器的操作; 转化单元4,将服务器中发生变动的缓存数据转化成数据包,或将数据包转化成发生变动的数据;
传输单元2,将所述数据包传输至其他服务器。它还包括应急加载缓存接口 5,当某台服务器当机时,所述应急加载缓存接口 5重新加载缓存数据,同时保证与其他服务器的正常通信。可以修正所有缓存数据同步问题。更能保证数据的准确性。每台服务器1都可以做发送端和接受端。这种方式就极大的加强的系统的安全稳定性,即当有某些服务器出现当机等问题时。不影响其他服务器1的正常运行。采用java语言编写的程序具体如下
1.以下是利用反射机制将object (实体类)和Map互转的实现
*将Map转换成类
public static void map20bject(Object obj, Map map)
throws IllegalArgumentException, IllegalAccessException { Field[] fields = obj. getClass(). getDeclaredFields (); for (int j = 0; j < fields, length; j++) { fields [j]. setAccessible(true) ;//设置这个变量不进行访问权限检查在类里设置的变量可以为private
fields [ j]. set (obj, map. get (fields [ j]. get Name ()));
ι
ι
*将类转换成Map
public static void object2Map(Object obj, Map map)
throws IllegalArgumentException, IllegalAccessException { Field[] fields = obj. getClass(). getDeclaredFields (); for (int j = 0; j < fields, length; j++) {
fields [j]. setAccessible(true) ;//设置这个变量不进行访问权限检查在类里设置的变量可以为private
map. put(fields[j]. getName (),fields[j]. get (obj));
ι
ι根据类名得到实例
public static Object getClassByName(String className) throws Exception
{
Class c; Object ο;
c = Class. forName(className);
ο = (c. getClassLoader (). IoadClass (className)). newlnstance (); return ο;
}
2.以下是发送端遍历发送数据的实现 Λ
入口遍历发送给集群中每个成员。*/
public boolean distributData(List list,String className){ boolean flag = true; try {
if (isDistribute!=null && isDistribute. equals (〃on〃)){//分布式缓存幵关。convertDataforRpc(list, className); for (int i = 0; i < host, length; i++) {
logger, info (host [i] + 〃〃 + port [i] + 〃/〃 + server [i]+ 〃 are in updata.....〃);
if (!sendData(host [i],port [i],server[i],dataList)) { logger, error(^IndexServerError error:"+ host[i]+ 〃〃+ port[i]+ 〃/"〃+ server[i]+ “ faild Vr); flag = false;
ι
ι
ι
}catch(Exception e) {
logger, error(^error: in PromptDistributer. distributData()〃,e); return false;
ι
return flag;
ι
3以下是接受数据的实现
接受rpc传过来的数据包并解析再同步缓存sava
public Boolean receiveUpdateData(List rpcData) {
6try {
String cIassName = (String)rpcData. get(0); logger, info (^^!^^seccess received bossDataDistrabutData林*classname="+className); Map rpcDataMap = new HashMap(); List rpcRelultList = new ArrayList ();
//更新缓存
SychronizedBossInfo se = new SychronizedBossInfoO ;
Object ο = DistrabutTool. getClassByName(className); for (int i = 1; i < rpcData. size () ; i++) {//从 1 幵始。O 的为是是 className ο = DistrabutTool. getClassByName(className); rpcDataMap = (HashMap) rpcData. get (i); DistrabutTool. map20bject(ο, rpcDataMap); rpcRelultList. add(ο);;
ι
if (className. equals (〃com. sitech. kms. ehcache. po jo. UserInfo〃)) {// 用户
se.UpdataUserByCach(rpcRelultList); } else if (className. equals (〃com· sitech. kms. ehcache. po jo. Dept〃)) {// 部门 se. UpdataDeptByCach(rpcRelultList); }else if (className. equals (〃ccm sitech. kms. ehcache. pojo. UserRole〃)){// 用户角色 se.updataUserRoIeByCach(rpcRelultList); } else if (className. equals (〃com. sitech. kms. ehcache. pojo. RoleMenu")) {// 角色菜单 se. updataRoIeMenuByCach(rpcRelultList); }else if (className. equals ("am sitech. kms. ehcache. pojo. RoleModuleO) 17/ 角色功會旨模块 se. updataRoIeModuleByCach(rpcRelultList);
ι
} catch (Exception e) { e. printStackTrace (); logger, error (^IndexServerError in PromptDistributReceiver. receiveUpdateData〃,e); return new Boolean(〃false〃);
ι
return new Boolean (〃true〃);
ι
现在行业内查询数据库的数据时,基本上都是直接用sql语句查询。每次查询都会对数据库造成压力和资源消耗。采用本发明后可以一次读取数据库后,无限次接受请求。并且本发明读取的是内存数据,所以速度比读取数据库快很多。 适用于比较少更新表数据。一般要使用在比较少执行write (将数据写入已打开的文件内)操作的表(包括update (更新表中原有数据),insert (插入),delete (删除)等)
本发明阐述了通过将多种数据类型存入缓存。以提高对数据访问的效率,适用于有数据访问时效率问题的一切系统。 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种分布式系统缓存同步的方法,其特征在于它包括以下步骤步骤1 将每台服务器数据库中所需数据进行缓存; 步骤2 当一台服务器缓存数据发生变化时,将该服务器中发生变动的数据,组装成数据包;步骤3 该服务器将数据包分发给其他服务器;步骤4 其他服务器接收所述数据包,再将数据包转化成所述发生变动的数据;步骤5 其他服务器将所述发生变动的数据进行缓存。
2.根据权利要求1所述的分布式系统缓存同步的方法,其特征在于所述步骤1包括以下子步骤步骤1. 1 在每台服务器上构造用于在内存中存储的域,即将要进行缓存的数据库数据按需求划分成值对象,以值对象的包名加类名组成缓存中的唯一域;步骤1. 2 将数据库中的记录读出,并将其构造成实体类,且数据库中的每一条记录对应成一个实体类;步骤1. 3 将实体类以Map的键值对方式存放入域中,其中Key为主键,Value值为对应的实体类。
3.根据权利要求1或2所述的分布式系统缓存同步的方法,其特征在于所述步骤2中每台服务器配置了 Listener,当一台服务器缓存数据发生变化时,Listener同时分发请求到其他服务器。
4.根据权利要求1或2所述的分布式系统缓存同步的方法,其特征在于所述步骤2中服务器通过反射机制将发生变动的数据转化成Map结构的数据包。
5.根据权利要求1或2所述的分布式系统缓存同步的方法,其特征在于所述步骤3为该服务器通过mlrpc方式,将数据包分发给其他服务器。
6.一种分布式系统缓存同步系统,其特征在于它包括多台服务器,所述每台服务器包括缓存单元,将数据库中所需数据进行缓存;监听单元,监听作为接收端的其他服务器的请求或作为发送端的服务器的操作;转化单元,将服务器中发生变动的缓存数据转化成数据包,或将数据包转化成发生变动的数据;传输单元,将所述数据包传输至其他服务器。
7.根据权利要求6所述的一种分布式系统缓存同步系统,其特征在于它还包括应急加载缓存接口,当某台服务器当机时,所述应急加载缓存接口重新加载缓存数据,同时保证与其他服务器的正常通信。
全文摘要
本发明涉及一种分布式系统缓存同步系统,它包括多台服务器,所述每台服务器包括缓存单元,将数据库中所需数据进行缓存;监听单元,监听作为接收端的其他服务器的请求或作为发送端的服务器的操作;转化单元,将服务器中发生变动的缓存数据转化成数据包,或将数据包转化成发生变动的数据;传输单元,将所述数据包传输至其他服务器。本发明还涉及一种分布式系统缓存同步方法。降低对数据库访问次数;读取缓存的速度大大高于读取文件和数据库,大大提高读取速度。分布式的支持,可以使大型高并发系统采用缓存成为可能。
文档编号H04L29/08GK102333108SQ201110066128
公开日2012年1月25日 申请日期2011年3月18日 优先权日2011年3月18日
发明者王涛 申请人:北京神州数码思特奇信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1