信创环境下基于数据库实现集群缓存同步处理的方法、装置、处理器及其可读存储介质与流程
未命名
07-15
阅读:99
评论:0
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]
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
技术特征:
1.一种信创环境下基于数据库实现集群缓存同步处理的方法,其特征在于,所述的方法包括以下步骤:(1)采用数据库作为缓存中间层,并在应用的数据库中初始化缓存表结构;(2)对缓存版本戳进行自定义处理;(3)自定义缓存配置开关类与缓存属性配置类;(4)自定义缓存实现类继承concurrentmapcache缓存实现类,并重写父类方法;(5)自定义缓存实现管理类继承concurrentmapcachemanager缓存管理类,并重写createconcurrentmapcache方法。2.根据权利要求1所述的信创环境下基于数据库实现集群缓存同步处理的方法,其特征在于,所述的步骤(2)具体为:将应用配置缓存信息生成uuid,作为缓存的版本戳,并对其进行自定义处理。3.根据权利要求1所述的信创环境下基于数据库实现集群缓存同步处理的方法,其特征在于,所述的步骤(3)具体为:按照以下方式自定义缓存配置开关类:继承cachingconfigurersupport缓存,并重写cachemanager()方法;按照以下方式自定义缓存属性配置类:使用@configurationproperties注解自定义缓存属性配置类,配置缓存名称、缓存容量及失效时间。4.根据权利要求1所述的信创环境下基于数据库实现集群缓存同步处理的方法,其特征在于,所述的步骤(4)具体为按照以下方式自定义缓存实现类:在查询的使用场景下,根据缓存key从内存中查询缓存;如果内存中存在此缓存,则对业务数据进行查询,待查询完业务数据后在缓存表中查询此缓存key的记录;所述的缓存表中如果无此缓存记录则生成版本戳插入缓存表中,所述的缓存表中如果有此缓存记录则查询此缓存版本戳,最后将业务数据、缓存key和版本戳存入内存;如果内存中不存在此缓存的数据,则先查询所述的缓存表中的数据,并将缓存在内存中的版本戳与数据库中的版本戳进行对比,如果所述的版本戳相同则直接返回内存中的数据,如果所述的版本戳不同则查询业务数据并返回,同时将业务数据、数据库中缓存的版本戳及缓存的key存储在内存中。5.根据权利要求4所述的信创环境下基于数据库实现集群缓存同步处理的方法,其特征在于,所述的步骤(4)按照以下方式重写父类方法:在修改的场景下,首先对内存缓存数据进行删除,再对缓存表中的数据进行删除,最后修改业务数据;并重写父类lookup(),get(),put(),putifabsent()或者evict()方法;其中,lookup()为查找缓存方法,get()为获取缓存方法,put()为存放缓存方法,putifabsent()为原子执行存储缓存操作,evict()为清理缓存方法。6.一种信创环境下基于数据库实现集群缓存同步处理的装置,其特征在于,所述的装置包括:处理器,被配置成执行计算机可执行指令;存储器,存储一个或多个计算机可执行指令,所述计算机可执行指令被所述处理器执行时,实现权利要求1至5中任一项所述的信创环境下基于数据库实现集群缓存同步处理的
方法的各个步骤。7.一种信创环境下基于数据库实现集群缓存同步处理的处理器,其特征在于,所述的处理器被配置成执行计算机可执行指令,所述的计算机可执行指令被所述的处理器执行时,实现权利要求1至5中任一项所述的信创环境下基于数据库实现集群缓存同步处理的方法的各个步骤。8.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述的计算机程序可被处理器执行以实现权利要求1至5中任一项所述的信创环境下基于数据库实现集群缓存同步处理的方法的各个步骤。
技术总结
本发明涉及一种信创环境下基于数据库实现集群缓存同步处理的方法,其中,该方法包括以下步骤:(1)采用数据库作为缓存中间层,并在应用的数据库中初始化缓存表结构;(2)对缓存版本戳进行自定义处理;(3)自定义缓存配置开关类与缓存属性配置类;(4)自定义缓存实现类继承ConcurrentMapCache缓存实现类,并重写父类方法;(5)自定义缓存实现管理类继承ConcurrentMapCacheManager缓存管理类,重写createConcurrentMapCache方法。本发明还涉及一种相应的装置、处理器及其计算机可读存储介质。采用了本发明的该信创环境下基于数据库实现集群缓存同步处理的方法、装置、处理器及其计算机可读存储介质,实现了企业应用在使用Spring Cache基础上无缝替换Redis,无需修改业务代码,能够有效支撑企业应用的信创平滑迁移。移。移。
技术研发人员:赵二龙 顾伟
受保护的技术使用者:普元信息技术股份有限公司
技术研发日:2023.02.03
技术公布日:2023/7/12
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
