发布信息

信创环境下基于数据库实现集群缓存同步处理的方法、装置、处理器及其可读存储介质与流程 专利技术说明

作者:admin      2023-07-13 21:36:38     987



计算;推算;计数设备的制造及其应用技术1.本发明涉及计算机软件技术领域,尤其涉及信创环境技术领域,具体是指一种信创环境下基于数据库实现集群缓存同步处理的方法、装置、处理器及其计算机可读存储介质。背景技术:2.快速发展的互联网时代,海量网络请求的剧增,在保证服务的高可用和优质的用户体验的同时,如何降低请求延迟时间,提升系统的吞吐量,一直成为业界关注的焦点。缓存技术有效地减轻了业务端的负载成为解决这一问题的最有效的技术之一。spring cache缓存框架是由spring 3.1版本发布出来的,它用于对使用缓存进行封装和抽象。3.伴随近年来信创实践的加速落地,以及信创需求的持续释放,企业应用向信创环境下迁移的需求越来越多,因此在没有redis的前提下实现集群下缓存数据的同步的需求就更加强烈。4.怎么保证无侵入式保障业务应用可靠运行,保证在原有架构上运行的众多业务应用,能够顺利迁移到信创架构,并在信创环境中平稳运行,实现业务系统迁移后的良好运行,同时提升信创验收的顺畅度。同时信创环境的应用能够满足高并发请求,以及后续业务连续增长对性能的要求,实现良好运行,这些都是需要迫切解决的问题。5.如果项目中已经使用了spring cache+redis实现缓存,项目如果有向信创环境下迁移的需求或者项目不能再继续使用redis。6.在这种情况下对业务系统进行迁移,目前就只有两种方案:7.(1)去掉缓存,将spring cache的注解全部删除掉。8.(2)将spring cache替换掉,使用其他缓存实现。9.项目如果去掉缓存的话,将会增加数据库压力会变大,请求延迟。严重服务的高可用和用户体验。10.如果不适用spring cache,项目必须去修改业务代码以满足要求,这样就导致项目迁移工作量变大,修改业务代码又会带来项目上线风险,会影响项目向信创环境迁移的进度。,会给企业带来极大的不便。技术实现要素:11.本发明的目的是克服了上述现有技术的缺点,提供了一种解决多节点部署或者多线程执行等高并发环境下缓存同步问题的信创环境下基于数据库实现集群缓存同步处理的方法、装置、处理器及其计算机可读存储介质。12.为了实现上述目的,本发明的信创环境下基于数据库实现集群缓存同步处理的方法、装置、处理器及其计算机可读存储介质如下:13.该信创环境下基于数据库实现集群缓存同步处理的方法,其主要特点是,所述的方法包括以下步骤:14.(1)采用数据库作为缓存中间层,并在应用的数据库中初始化缓存表结构;15.(2)对缓存版本戳进行自定义处理;16.(3)自定义缓存配置开关类与缓存属性配置类;17.(4)自定义缓存实现类继承concurrentmapcache缓存实现类,并重写父类方法;18.(5)自定义缓存实现管理类继承concurrentmapcachemanager缓存管理类,并重写createconcurrentmapcache方法。19.较佳地,所述的步骤(2)具体为:20.将应用配置缓存信息生成uuid,作为缓存的版本戳,并对其进行自定义处理。21.较佳地,所述的步骤(3)具体为:22.按照以下方式自定义缓存配置开关类:继承cachingconfigurersupport缓存,并重写cachemanager()方法;23.按照以下方式自定义缓存属性配置类:使用@configurationproperties注解自定义缓存属性配置类,配置缓存名称、缓存容量及失效时间。24.较佳地,所述的步骤(4)具体为按照以下方式自定义缓存实现类:25.在查询的使用场景下,根据缓存key从内存中查询缓存;26.如果内存中存在此缓存,则对业务数据进行查询,待查询完业务数据后在缓存表中查询此缓存key的记录;所述的缓存表中如果无此缓存记录则生成版本戳插入缓存表中,所述的缓存表中如果有此缓存记录则查询此缓存版本戳,最后将业务数据、缓存key和版本戳存入内存;27.如果内存中不存在此缓存的数据,则先查询所述的缓存表中的数据,并将缓存在内存中的版本戳与数据库中的版本戳进行对比,如果所述的版本戳相同则直接返回内存中的数据,如果所述的版本戳不同则查询业务数据并返回,同时将业务数据、数据库中缓存的版本戳及缓存的key存储在内存中。28.较佳地,所述的步骤(4)按照以下方式重写父类方法:29.在修改的场景下,首先对内存缓存数据进行删除,再对缓存表中的数据进行删除,最后修改业务数据;并重写父类lookup(),get(),put(),putifabsent()或者evict()方法;30.其中,lookup()为查找缓存方法,get()为获取缓存方法,put()为存放缓存方法,putifabsent()为原子执行存储缓存操作,evict()为清理缓存方法。31.该信创环境下基于数据库实现集群缓存同步处理的装置,其主要特点是,所述的装置包括:32.处理器,被配置成执行计算机可执行指令;33.存储器,存储一个或多个计算机可执行指令,所述计算机可执行指令被所述处理器执行时,实现上述所述的信创环境下基于数据库实现集群缓存同步处理的方法的各个步骤。34.该信创环境下基于数据库实现集群缓存同步处理的处理器,其主要特点是,所述的处理器被配置成执行计算机可执行指令,所述的计算机可执行指令被所述的处理器执行时,实现上述所述的信创环境下基于数据库实现集群缓存同步处理的方法的各个步骤。35.该计算机可读存储介质,其主要特点是,其上存储有计算机程序,所述的计算机程序可被处理器执行以实现上述所述的信创环境下基于数据库实现集群缓存同步处理的方法的各个步骤。36.采用了本发明的该信创环境下基于数据库实现集群缓存同步处理的方法、装置、处理器及其计算机可读存储介质,通过将数据库作为缓存中间层,自定义缓存实现concurrentmapcache实现类,根据@cacheable注解中的value与key根据规则生成缓存的主键key,并且会生成相应缓存key的版本戳。根据内存中存储的缓存版本戳与数据库中相同key的缓存版本戳进行对比。根据缓存版本戳对比结果更新相应数据,在查询的使用场景下,如果版本戳相同则使用内存中的缓存,如果版本戳不同则丢弃内存中的缓存数据,重新从数据库查询业务数据并且将缓存在数据库的版本戳与数据一起更新内存中。在修改数据的使用场景下,重新生成缓存版本戳更新内存缓存数据,并且更新数据库中缓存的版本戳。从而实现多节点部署或者多线程执行等高并发环境下缓存同步问题,实现了企业应用在使用spring cache基础上无缝替换redis,无需修改业务代码。在国家大力推动信创产业发展跟国产化的大背景下,支撑企业应用的信创平滑迁移。附图说明37.图1为本发明的信创环境下基于数据库实现集群缓存同步处理的方法的流程图。具体实施方式38.为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。39.在详细说明根据本发明的实施例前,应该注意到的是,在下文中,术语“包括”、“包含”或任何其他变体旨在涵盖非排他性的包含,由此使得包括一系列要素的过程、方法、物品或者设备不仅包含这些要素,而且还包含没有明确列出的其他要素,或者为这种过程、方法、物品或者设备所固有的要素。40.请参阅图1所示,该信创环境下基于数据库实现集群缓存同步处理的方法,其中,所述的方法包括以下步骤:41.(1)采用数据库作为缓存中间层,并在应用的数据库中初始化缓存表结构;42.(2)对缓存版本戳进行自定义处理;43.(3)自定义缓存配置开关类与缓存属性配置类;44.(4)自定义缓存实现类继承concurrentmapcache缓存实现类,并重写父类方法;45.(5)自定义缓存实现管理类继承concurrentmapcachemanager缓存管理类,并重写createconcurrentmapcache方法。46.作为本发明的优选实施方式,所述的步骤(2)具体为:47.将应用配置缓存信息生成uuid,作为缓存的版本戳,并对其进行自定义处理。48.作为本发明的优选实施方式,所述的步骤(3)具体为:49.按照以下方式自定义缓存配置开关类:继承cachingconfigurersupport缓存,并重写cachemanager()方法;50.按照以下方式自定义缓存属性配置类:使用@configurationproperties注解自定义缓存属性配置类,配置缓存名称、缓存容量及失效时间。51.作为本发明的优选实施方式,所述的步骤(4)具体为按照以下方式自定义缓存实现类:52.在查询的使用场景下,根据缓存key从内存中查询缓存;53.如果内存中存在此缓存,则对业务数据进行查询,待查询完业务数据后在缓存表中查询此缓存key的记录;所述的缓存表中如果无此缓存记录则生成版本戳插入缓存表中,所述的缓存表中如果有此缓存记录则查询此缓存版本戳,最后将业务数据、缓存key和版本戳存入内存;54.如果内存中不存在此缓存的数据,则先查询所述的缓存表中的数据,并将缓存在内存中的版本戳与数据库中的版本戳进行对比,如果所述的版本戳相同则直接返回内存中的数据,如果所述的版本戳不同则查询业务数据并返回,同时将业务数据、数据库中缓存的版本戳及缓存的key存储在内存中。55.作为本发明的优选实施方式,所述的步骤(4)按照以下方式重写父类方法:56.在修改的场景下,首先对内存缓存数据进行删除,再对缓存表中的数据进行删除,最后修改业务数据;并重写父类lookup(),get(),put(),putifabsent()或者evict()方法;57.其中,lookup()为查找缓存方法,get()为获取缓存方法,put()为存放缓存方法,putifabsent()为原子执行存储缓存操作,evict()为清理缓存方法。58.在实际应用当中,本技术方案的具体实现步骤如下:59.一、采用数据库作为缓存中间层60.采用数据库作为缓存中间层,在应用的数据库中初始化缓存表结构。61.缓存表初始化语句如下:[0062][0063]其中pid为数据库主键,cache_name为缓存名称,cache_key为缓存key,version_num为缓存版本戳,create_time为缓存创建时间,update_time为缓存修改时间,expired_time为缓存过期时间。[0064]二、自定义缓存版本戳[0065]版本戳生成规则为随机生成uuid。[0066]具体代码如下[0067][0068]三、自定义缓存开关配置类[0069]自定义缓存开关配置类为具体缓存模式选择的开关,此方法返回我们自定义的cachemanager的bean对象。[0070]具体开关配置如下:[0071][0072]打开应用的application.properties或者application.yaml配置文件,添加缓存的配置开关信息;[0073]具体代码实现如下:[0074][0075]四、自定义缓存属性配置类[0076]使用@configurationproperties注解自定义缓存属性配置类,支持缓存的一些属性配置的信息配置,如缓存名称、缓存容量及失效时间。[0077]具体配置如下:[0078][0079]清理过期缓存的具体实现如下:[0080][0081][0082]五、自定义缓存实现类[0083]缓存实现类是最为核心的类,主要涉及两种场景,[0084]在查询的使用场景下:首先先根据缓存key从内存中查询缓存,(1)如果内存中没有此缓存说明缓存在此节点第一次使用还没有缓存数据,则从对业务数据进行查询,查询完业务数据后载在缓存表中查询此缓存key的记录;缓存表中如果无此缓存记录则生成版本戳插入缓存表中;缓存表中如果有此缓存记录则查询此缓存版本戳。最后将业务数据、缓存key和版本戳存入内存。(2)如果内存中有次缓存的数据,则先查询缓存表中数据,缓存在内存中的版本戳与数据库中的版本戳进行对比,版本戳如果相同则直接返回内存中的数据,无需再去数据库进行查询;版本戳如果不同则查询业务数据并返回,同时将业务数据、数据库中缓存的版本戳及缓存的key存储在内存中。[0085]在修改的场景下:首先对内存缓存数据进行删除,再对缓存表中的数据进行删除,最后去修改业务数据。[0086]主要涉及的方法为lookup(),get(),put(),putifabsent(),evict()方法。[0087][0088][0089][0090]在整个缓存的使用逻辑中,涉及到对数据库进行操作,缓存更新模块使用内存concurrenthashmap进行实现,数据库操作使用jdbctemplate进行数据库操作。应用无需添加额外依赖即可使用。具体代码如下:[0091][0092]每个缓存的容量配置具体是在这里生效的。[0093]该信创环境下基于数据库实现集群缓存同步处理的装置,其中,所述的装置包括:[0094]处理器,被配置成执行计算机可执行指令;[0095]存储器,存储一个或多个计算机可执行指令,所述计算机可执行指令被所述处理器执行时,实现上述所述的信创环境下基于数据库实现集群缓存同步处理的方法的各个步骤。[0096]该信创环境下基于数据库实现集群缓存同步处理的处理器,其中,所述的处理器被配置成执行计算机可执行指令,所述的计算机可执行指令被所述的处理器执行时,实现上述所述的信创环境下基于数据库实现集群缓存同步处理的方法的各个步骤。[0097]该计算机可读存储介质,其中,其上存储有计算机程序,所述的计算机程序可被处理器执行以实现上述所述的信创环境下基于数据库实现集群缓存同步处理的方法的各个步骤。[0098]流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。[0099]应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行装置执行的软件或固件来实现。[0100]本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成的,程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。[0101]上述提到的存储介质可以是只读存储器,磁盘或光盘等。[0102]在本说明书的描述中,参考术语“一实施例”、“一些实施例”、“示例”、“具体示例”、或“实施例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。[0103]尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。[0104]采用了本发明的该信创环境下基于数据库实现集群缓存同步处理的方法、装置、处理器及其计算机可读存储介质,通过将数据库作为缓存中间层,自定义缓存实现concurrentmapcache实现类,根据@cacheable注解中的value与key根据规则生成缓存的主键key,并且会生成相应缓存key的版本戳。根据内存中存储的缓存版本戳与数据库中相同key的缓存版本戳进行对比。根据缓存版本戳对比结果更新相应数据,在查询的使用场景下,如果版本戳相同则使用内存中的缓存,如果版本戳不同则丢弃内存中的缓存数据,重新从数据库查询业务数据并且将缓存在数据库的版本戳与数据一起更新内存中。在修改数据的使用场景下,重新生成缓存版本戳更新内存缓存数据,并且更新数据库中缓存的版本戳。从而实现多节点部署或者多线程执行等高并发环境下缓存同步问题,实现了企业应用在使用spring cache基础上无缝替换redis,无需修改业务代码。在国家大力推动信创产业发展跟国产化的大背景下,支撑企业应用的信创平滑迁移。[0105]在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。









图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!




内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,发布内容不收取任何费用也不接任何广告!




免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

相关内容 查看全部