System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及计算机,特别是涉及一种基于jvm缓存的分布式同步方法、系统、设备及储存介质。
技术介绍
1、jvm缓存是指java虚拟机(jvm)在运行时为了提高性能而使用的一种缓存机制。jvm缓存可以分为两种类型:堆缓存和元数据缓存。
2、jvm缓存是一种提高java应用程序性能的重要机制,通过缓存对象、字符串、类信息等数据,可以减少内存占用和重复计算的开销,提高程序的执行效率和响应速度。在分布式环境中,由于不同jvm实例之间的缓存不同步,可能会导致数据不一致的问题,需要采取相应的缓存同步策略。
3、binlog日志是mysql将数据库中所有的update,delete,insert操作数据的操作以二进制的方式记录下来,由于记录了所有的操作过程,所以可以用来做数据恢复。
4、现有技术包括以下解决方案:
5、方案一:canal搭配redis方案,将数据变化更新到redis缓存中间件。
6、方案二:采用jvm缓存目前存在通过quartz、xxl-job等组件在业务程序启动定时任务,定时刷新业务数据。
7、上述的缓存方法,虽可以在一定程度上实现缓存功能,但是在实际使用时却发现其方法中还存在有若干缺点,因未能达到最佳的使用效果,而其缺点可归纳如下:
8、1)在高并发要求下,业务系统通过网络访问redis缓存,在此过程中,时间延迟波动较大,稳定性差,延迟高。时间花费较多在网络通讯上,这将会导致业务性能无法发挥到极致。
9、2)数据刷新不够实时,
10、由此可见,上述现有的缓存方法在使用上,显然仍存在有不便与缺陷,而亟待加以进一步改进。如何能创设一种新的jvm缓存方法,成为当前业界急需改进的目标。
技术实现思路
1、有鉴于此,本公开实施例提供一种基于jvm缓存的分布式同步方法,至少部分解决现有技术中存在的问题。
2、第一方面,本公开实施例提供了一种基于jvm缓存的分布式同步方法,所述方法包括以下步骤:
3、通过将服务端伪装成mysql的从节点,获取mysql的binlog数据;
4、采用微批处理的方式处理所述binlog数据,合并所述微批处理后的binlog中的待缓存数据,将合并后的binlog数据发往服务器端的数据缓存中心,储存为缓存数据;
5、对所述缓存数据进行压缩,通过数据分发器将缓存分发给各个客户端。
6、根据本公开实施例的一种具体实现方式,所述方法还包括:
7、接收客户端注册的实例元数据,并且接收客户端发起的要订阅数据的元数据。
8、根据本公开实施例的一种具体实现方式,所述通过将服务端伪装成mysql的从节点,获取mysql的binlog数据,包括:
9、mysql通过配置启用binlog,开启主从同步,将mysql主库数据同步到从库数据;
10、将服务端伪装成mysql的从节点,订阅接收mysql同步的数据。
11、根据本公开实施例的一种具体实现方式,所述将合并后的binlog数据发往服务器端的数据缓存中心,储存为缓存数据,包括:
12、基于客户端订阅的数据信息进行比对,仅保留预设类型的缓存数据,将所述预设类型的缓存数据保存至数据缓存中心。
13、根据本公开实施例的一种具体实现方式,所述对所述缓存数据进行压缩,通过数据分发器将缓存分发给各个客户端基于master选举机制实现,包括:
14、同时触发数据分发器,数据分发器将变更的数据和订阅信息进行比对,获取订阅变更数据的客户端列表;
15、将数据进行压缩同步分发到客户端实例,客户端实例接收到数据后,修改jvm内存数据。
16、第二方面,本公开实施例提供了一种基于jvm缓存的分布式同步系统,所述系统包括:
17、数据获取模块,被配置用于通过将服务端伪装成mysql的从节点,获取mysql的binlog数据;
18、数据处理模块,被配置用于采用微批处理的方式处理所述binlog数据,合并所述微批处理后的binlog中的待缓存数据,将合并后的binlog数据发往服务器端的数据缓存中心,储存为缓存数据;
19、数据分发模块,被配置用于对所述缓存数据进行压缩,通过数据分发器将缓存分发给各个客户端。
20、根据本公开实施例的一种具体实现方式,所述系统还包括:
21、伪装模块,被配置用于mysql通过配置启用binlog,开启主从同步,将mysql主库数据同步到从库数据;
22、将服务端伪装成mysql的从节点,订阅接收mysql同步的数据。
23、第三方面,本公开实施例还提供了一种电子设备,该电子设备包括:
24、至少一个处理器;以及,
25、与所述至少一个处理器通信连接的存储器;其中,
26、所述存储器存储有能够被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行时,使所述至少一个处理器前述第一方面或第一方面的任一实现方式中的任一项所述的基于jvm缓存的分布式同步方法。
27、第四方面,本公开实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令当由至少一个处理器执行时使所述至少一个处理器执行前述第一方面或第一方面的任一实现方式中的基于jvm缓存的分布式同步方法。
28、第五方面,本公开实施例还提供了一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使该计算机执行前述第一方面或第一方面的任一实现方式中的基于jvm缓存的分布式同步方法。
29、本公开实施例中的基于jvm缓存的分布式同步方法,通过将mysql中存储的数据同步到不同主机的jvm本地缓存中,从而使得在海量数据场景下,保证业务性能。本专利技术的关键点在于订阅接收mysql同步的数据从而刷新jvm缓存并且保证数据的实时性与一致性。并且通过直接访问jvm缓存减少了查询redis等中间件的网络开销,性能提升。
本文档来自技高网...【技术保护点】
1.一种基于JVM缓存的分布式同步方法,其特征在于,所述方法包括以下步骤:
2.根据权利要求1所述的基于JVM缓存的分布式同步方法,其特征在于,所述方法还包括:
3.根据权利要求1所述的基于JVM缓存的分布式同步方法,其特征在于,所述通过将服务端伪装成MySQL的从节点,获取MySQL的binlog数据,包括:
4.根据权利要求1所述的基于JVM缓存的分布式同步方法,其特征在于,所述将合并后的binlog数据发往服务器端的数据缓存中心,储存为缓存数据,包括:
5.根据权利要求1所述的基于JVM缓存的分布式同步方法,其特征在于,所述对所述缓存数据进行压缩,通过数据分发器将缓存分发给各个客户端基于Master选举机制实现,包括:
6.一种基于JVM缓存的分布式同步系统,其特征在于,所述系统包括:
7.根据权利要求6所述的基于JVM缓存的分布式同步系统,其特征在于,所述系统还包括:
8.一种电子设备,其特征在于,该电子设备包括:
9.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机
...【技术特征摘要】
1.一种基于jvm缓存的分布式同步方法,其特征在于,所述方法包括以下步骤:
2.根据权利要求1所述的基于jvm缓存的分布式同步方法,其特征在于,所述方法还包括:
3.根据权利要求1所述的基于jvm缓存的分布式同步方法,其特征在于,所述通过将服务端伪装成mysql的从节点,获取mysql的binlog数据,包括:
4.根据权利要求1所述的基于jvm缓存的分布式同步方法,其特征在于,所述将合并后的binlog数据发往服务器端的数据缓存中心,储存为缓存数据,包括:
5.根据权利要求1所述的基于jvm缓存的分布式同步方法,其特征...
【专利技术属性】
技术研发人员:郭昌盛,郭茂清,李华生,王磊,姜昱西,
申请(专利权)人:北京江民新科技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。