数据处理方法、装置、存储介质和电子装置与流程

文档序号:30102020发布日期:2022-05-18 13:04阅读:257来源:国知局
数据处理方法、装置、存储介质和电子装置与流程

1.本发明涉及数据处理领域,具体而言,涉及一种数据处理方法、装置、存储介质和电子装置。


背景技术:

2.目前,在对数据进行存储时,可以使用持久层框架(mybatis)缓存方法进行。该方法对底层的对象存储进行了抽象,可以随时更换存储对象。
3.但是,上述方法是专门针对mybatis框架而设计的,这仅在通过mybatis框架进行数据库访问时才能使用,而在数据处理场景中还可能会使用其它框架,比如,使用对象关系型持久化存储和查询的服务框架(hibernate)、mybatis的增强工具(mybatisplus)、用于实现基于java持久化接口的存储库的框架(springdatajpa)等。因此,仅仅使用mybatis是难以适用于其它数据处理场景,从而使得数据缓存的局限性大。
4.针对上述的数据缓存的局限性大的问题,目前尚未提出有效的解决方案。


技术实现要素:

5.本发明至少部分实施例提供了一种数据处理方法、装置、存储介质和电子装置,以至少解决数据缓存的局限性大的技术问题。
6.为了实现上述目的,根据本发明其中一实施例,提供了一种数据处理方法。该方法可以应用于存储操作模块,存储操作模块由面向切面编程得到,该方法可以包括:检测当前待执行的目标程序代码;响应于目标程序代码由对应的第一目标标识进行标识,且确定未从目标存储空间中调用到目标程序代码的执行结果,执行目标程序代码,得到执行结果;将执行结果写入至目标存储空间,以作为与目标程序代码关联的待执行程序代码的待调用数据。
7.可选地,基于第一目标标识获取目标参数;确定未从目标存储空间中调用到执行结果,包括:基于目标参数确定未从目标存储空间中调用到执行结果。
8.可选地,基于目标参数确定未从目标存储空间中调用到执行结果,包括:基于目标参数中的键参数确定缓存键;响应于缓存键对应的值未存储在目标存储空间,确定未从目标存储空间中调用到执行结果。
9.可选地,在执行目标程序代码,得到执行结果之后,方法还包括:响应于目标参数中包括目标值,禁止将执行结果写入至目标存储空间。
10.可选地,响应于缓存键对应的值存储在目标存储空间,从目标存储空间中调用缓存键对应的值,且将缓存键对应的值确定为从目标存储空间中调用到的执行结果。
11.可选地,基于目标参数确定未从目标存储空间中调用到执行结果,包括:响应于获取到目标程序代码绑定的缓存上下文,且缓存上下文声明了允许使用目标存储空间的执行结果,基于目标参数确定未从目标存储空间中调用到执行结果,其中,缓存上下文用于表征将执行结果写入至目标存储空间。
12.可选地,基于线程本地变量建立目标程序代码与缓存上下文之间的绑定关系。
13.可选地,在执行目标程序代码,得到执行结果之后,方法还包括:解除目标程序代码与缓存上下文之间的绑定关系。
14.可选地,基于第二目标标识生成缓存上下文,其中,第二目标标识用于声明缓存入口,缓存入口用于确定目标存储空间。
15.可选地,确定未从目标存储空间中调用到目标程序代码的执行结果,包括:响应于未获取到目标程序代码绑定的缓存上下文,或者,获取到目标程序代码绑定的缓存上下文,且缓存上下文声明了禁止使用目标存储空间的执行结果,确定未从目标存储空间中调用到执行结果,其中,缓存上下文用于表征将执行结果写入至目标存储空间。
16.可选地,响应于识别到目标程序代码对应的第三目标标识,从目标存储空间中读取到执行结果,其中,第三目标标识用于声明从目标存储空间中读取到执行结果。
17.可选地,将执行结果写入至目标存储空间,包括:响应于识别到目标程序代码对应的第四目标标识,将执行结果写入至目标存储空间,其中,第四目标标识用于声明将执行结果写入至目标存储空间。
18.可选地,响应于识别到目标程序代码对应的第五目标标识,将执行结果从目标存储空间中删除,其中,第五目标标识用于声明将执行结果从目标存储空间中删除。
19.可选地,目标存储空间为一级缓存存储空间。
20.为了实现上述目的,根据本发明的另一方面,还提供了一种数据处理装置。该装置可以应用于存储操作模块,存储操作模块由面向切面编程得到,该装置可以包括:检测单元,用于检测当前时间待执行到的目标程序代码;执行单元,用于响应于目标程序代码由对应的第一目标标识进行标识,且确定未从目标存储空间中调用到目标程序代码的执行结果,执行目标程序代码,得到执行结果;写入单元,用于将执行结果写入至目标存储空间,以作为与目标程序代码关联的待执行程序代码的待调用数据。
21.为了实现上述目的,根据本发明的另一方面,还提供了一种计算机可读存储介质。该计算机可读存储介质中存储有计算机程序,其中,在计算机程序被处理器运行时控制计算机可读存储介质所在设备执行本发明实施例数据处理方法。
22.为了实现上述目的,根据本发明的另一方面,还提供了一种电子装置。该电子装置可以包括存储器和处理器,其特征在于,存储器中存储有计算机程序,处理器被设置为被处理器运行计算机程序以执行本发明实施例的数据处理方法。
23.在本发明的实施例中,检测当前待执行的目标程序代码;响应于目标程序代码由对应的第一目标标识进行标识,且确定未从目标存储空间中调用到目标程序代码的执行结果,执行目标程序代码,得到执行结果;将执行结果写入至目标存储空间,以作为与目标程序代码关联的待执行程序代码的待调用数据。也就是说,本发明在将缓存的处理操作抽取到切面编程的切面中的基础上,利用对目标程序代码进行标记的方式,在目标程序代码的执行结果返回后,将目标程序代码的执行结果写入目标存储空间;并在下次目标程序代码执行前,从目标存储空间中读取已缓存的执行结果,并返回给上层方法调用,从而实现了降低数据缓存的局限性的技术效果,解决了数据缓存的局限性大的技术问题。
附图说明
24.此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
25.图1是根据本发明其中一实施例的一种数据处理方法的移动终端的硬件结构框图;
26.图2是根据本发明其中一实施例的一种数据处理方法的流程图;
27.图3是根据本发明其中一实施例的一种数据处理组件模块的示意图;
28.图4是根据本发明其中一实施例的一种入口定义缓存操作注解类图的示意图;
29.图5是根据本发明其中一实施例的一种读缓存操作注解类图的示意图;
30.图6是根据本发明其中一实施例的一种写缓存操作类图的示意图;
31.图7是根据本发明其中一实施例的一种删除缓存操作注解类图的示意图;
32.图8是根据本发明其中一实施例的一种读写缓存操作注解类图的示意图;
33.图9是根据本发明其中一实施例的一种入口定义缓存操作注解标记方法执行的示意图;
34.图10是根据本发明其中一实施例的一种读写缓存操作注解标记方法执行的示意图;
35.图11是根据本发明其中一实施例的一种数据处理装置的结构框图。
具体实施方式
36.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
37.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
38.根据本发明其中一实施例,提供了一种数据处理方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
39.该方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,该移动终端可以是智能手机(如android手机、ios手机等)、平板电脑、掌上电脑以及移动互联网设备(mobileinternetdevices,简称为mid)、pad、游戏机等终端设备。图1是本发明实施例的一种数据处理方法的移动终端的硬件结构框图。如图1所示,移
动终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于中央处理器(cpu)、图形处理器(gpu)、数字信号处理(dsp)芯片、微处理器(mcu)、可编程逻辑器件(fpga)、神经网络处理器(npu)、张量处理器(tpu)、人工智能(ai)类型处理器等的处理装置)和用于存储数据的存储器104。可选地,上述移动终端还可以包括用于通信功能的传输设备106、输入输出设备108以及显示设备110。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
40.存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的数据处理方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的数据处理方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
41.传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(network interface controller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(radio frequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。
42.输入输出设备108中的输入可以来自多个人体学接口设备(human interface device,简称为hid)。例如:键盘和鼠标、游戏手柄、其他专用游戏控制器(如:方向盘、鱼竿、跳舞毯、遥控器等)。部分人体学接口设备除了提供输入功能之外,还可以提供输出功能,例如:游戏手柄的力反馈与震动、控制器的音频输出等。
43.显示设备110可以例如平视显示器(hud)、触摸屏式的液晶显示器(lcd)和触摸显示器(也被称为“触摸屏”或“触摸显示屏”)。该液晶显示器可使得用户能够与移动终端的用户界面进行交互。在一些实施例中,上述移动终端具有图形用户界面(gui),用户可以通过触摸触敏表面上的手指接触和/或手势来与gui进行人机交互,此处的人机交互功能可选的包括如下交互:创建网页、绘图、文字处理、制作电子文档、游戏、视频会议、即时通信、收发电子邮件、通话界面、播放数字视频、播放数字音乐和/或网络浏览等、用于执行上述人机交互功能的可执行指令被配置/存储在一个或多个处理器可执行的计算机程序产品或可读存储介质中。
44.在本实施例中提供了一种运行于上述移动终端的一种数据理方法,该方法应用于存储操作模块,存储操作模块由面向切面编程得到,其中,面向切面编程可以称为aspect oriented programming,可以用aop表示,图2是根据本发明其中一实施例的一种数据处理方法的流程图,如图2所示,该方法包括如下步骤:
45.步骤s202,检测当前待执行的目标程序代码。
46.在本发明上述步骤s202提供的技术方案中,检测当前执行的目标程序代码,其中,目标程序代码可以为用户当前选择的程序代码,可以为代码行。
47.步骤s204,响应于目标程序代码由对应的第一目标标识进行标识,且确定未从目
标存储空间中调用到目标程序代码的执行结果,执行目标程序代码,得到执行结果。
48.在本发明上述步骤s204提供的技术方案,确定当前选择的目标程序代码,该目标程序代码由对应的第一目标标识进行标识,同时,确定目标存储空间是否调用过目标程序代码的执行结果,如果未从目标存储空间调用过目标程序代码的执行结果,则执行目标程序代码,得到执行结果,其中,第一目标标识可以称为程序代码对应的注解标记;目标存储空间可以为内存空间;执行结果可以用value表示。
49.可选地,确定当前选择的目标程序代码,对当前选择的目标程序代码对应的第一目标标识进行标识,由目标程序代码对应的第一目标标识对目标程序代码进行标识,同时,确定目标存储空间是否调用过目标程序代码的执行结果,如果未从目标存储空间调用过目标程序代码的执行结果,则执行目标程序代码,可以根据目标程序代码对应的第一目标标识的参数,确定执行结果。
50.步骤s206,将执行结果写入至目标存储空间,以作为与目标程序代码关联的待执行程序代码的待调用数据。
51.在本发明上述步骤s206提供的技术方案,将执行结果写入至目标存储空间,将执行结果作为与目标程序代码关联的待执行程序代码的待调用数据,其中,待执行程序代码可以为上层方法使用的程序代码,即,可以为调用方使用的程序代码。
52.可选地,执行目标程序代码,得到执行结果,将执行结果写入目标存储空间,将执行结果作为与目标程序代码关联的待执行程序代码的待调用数据,当下次目标程序代码执行前,从目标存储空间中读取待执行程序代码的待调用数据,将待调用数据返回至上层方法进行调用。
53.通过本技术上述步骤s202至步骤s206,检测当前待执行的目标程序代码;响应于目标程序代码由对应的第一目标标识进行标识,且确定未从目标存储空间中调用到目标程序代码的执行结果,执行目标程序代码,得到执行结果;将执行结果写入至目标存储空间,以作为与目标程序代码关联的待执行程序代码的待调用数据。也就是说,本发明在将缓存的处理操作抽取到切面编程的切面中的基础上,利用对目标程序代码进行标记的方式,在目标程序代码的执行结果返回后,将目标程序代码的执行结果写入目标存储空间;并在下次目标程序代码执行前,从目标存储空间中读取已缓存的执行结果,并返回给上层方法调用,从而实现了降低数据缓存的局限性的技术效果,解决了数据缓存的局限性大的技术问题。
54.下面对该实施例上述方法进行进一步介绍。
55.作为一种可选的实施方式,基于第一目标标识获取目标参数;步骤s204,确定未从目标存储空间中调用到执行结果,包括:基于目标参数确定未从目标存储空间中调用到执行结果。
56.在该实施例中,对第一目标标识进行解析,得到目标参数,通过判断目标参数对应的执行结果是否存在,如果不存在,则确定目标参数未从目标存储空间中调用到执行结果,其中,目标参数可以为操作缓存时使用的参数,可以是key表达式、key求值器、缓存有效期等。
57.可选地,对第一目标标识(注解参数)进行解析,得到被标记方法操作缓存时使用的目标参数,比如,key表达式、key求值器、缓存有效期,通过确定key表达式、key求值器、缓
存有效期等数据,确定目标参数对应的执行结果不存在,以确定目标参数未从目标存储空间中调用到执行结果。
58.作为一种可选的实施方式,基于目标参数确定未从目标存储空间中调用到执行结果,包括:基于目标参数中的键参数确定缓存键;响应于缓存键对应的值未存储在目标存储空间,确定未从目标存储空间中调用到执行结果。
59.在该实施例中,确定目标参数中的键参数,基于目标参数中的键参数确定缓存键,如果缓存键对应的值未存储在目标存储空间中,则确定未从目标存储空间中调用到执行结果,其中,键参数可以为key表达式和key求值器,缓存键可以为根据key表达式和key求值器计算出来的真正操作的缓存key。
60.可选地,根据键参数(key表达式和key求值器)来计算真正操作的键参数(缓存key),读取计算出来的缓存key键参数,判断目标存储空间中是否存在键参数对应的值,如果缓存键对应的值未存储在目标存储空间,则确定未从目标存储空间中调用到执行结果。
61.作为一种可选的实施方式,步骤s204,在执行目标程序代码,得到执行结果之后,方法还包括:响应于目标参数中包括目标值,禁止将执行结果写入至目标存储空间。
62.在该实施例中,得到执行结果之后,在将执行结果写入至目标存储空间之前,判断目标参数中是否包括目标值,如果包括目标值,则禁止将执行结果写入至目标存储空间,其中,目标值可以为忽略被标记方法返回的无效值(null值)。
63.可选地,在将执行结果写入至目标存储空间之前,判断目标参数中是否包括目标值(忽略被标记方法返回的无效值),如果目标参数中配置了忽略被标记方法返回的无效,则中止写入缓存操作,以达到禁止将执行结果写入至目标存储空间的目的。
64.作为一种可选的实施方式,响应于缓存键对应的值存储在目标存储空间,从目标存储空间中调用缓存键对应的值,且将缓存键对应的值确定为从目标存储空间中调用到的执行结果。
65.在该实施例中,判断缓存键对应的值是否存储在目标存储空间,如果缓存键对应的值存储在目标存储空间,则从目标存储空间中调用缓存键对应的值,并将缓存键对应的值确定为从目标存储空间中调用到的执行结果。
66.可选地,选择目标程序代码,对选择的目标程序代码对应的第一目标标识进行解析,得到目标参数,确定目标参数中的键参数,基于目标参数中的键参数确定缓存键,如果缓存键对应的值存储在目标存储空间,则从目标存储空间中调用缓存键对应的值,并将缓存键对应的值确定为从目标存储空间中调用到的执行结果,从而可以直接使用已缓存的值,从而可以有效减少方法调用,提高程序运行速度。
67.作为一种可选的实施方式,基于目标参数确定未从目标存储空间中调用到执行结果,包括:响应于获取到目标程序代码绑定的缓存上下文,且缓存上下文声明了允许使用目标存储空间的执行结果,基于目标参数确定未从目标存储空间中调用到执行结果,其中,缓存上下文用于表征将执行结果写入至目标存储空间。
68.在该实施例中,目标程序代码绑定有缓存上下文,获取选定目标程序代码绑定的缓存上下文,如果缓存上下文中声明了允许使用目标存储空间的执行结果,则确定未从目标存储空间中调用到执行结果,其中,缓存上下文可以包括存储了缓存入口方法、缓存操作管理器等的相关数据,可以用于表征将执行结果写入至目标存储空间。
69.可选地,获取到目标程序代码绑定的缓存上下文,可以为获取缓存入口方法栈帧在方法调用栈中的位置、缓存key解析器配置、缓存读写配置等信息,可以基于获取的缓存上下文中的缓存key解析器配置信息,判断缓存上下文中是否声明了允许使用目标存储空间的执行结果,如果声明了允许使用目标存储空间的执行结果,则确定未从目标存储空间中调用到执行结果。
70.作为一种可选的实施方式,基于线程本地变量建立目标程序代码与缓存上下文之间的绑定关系。
71.在该实施例中,通过引用线程本地变量,达到建立目标程序代码与缓存上下文之间的绑定关系的目的,其中,线程本地变量是一种变量引用,可以用于保证在不同的目标程序代码中访问变量时,引用了不同的变量实例之间,不会互相影响。如果在此方法进入之前存在缓存上下文,会先解除与之前缓存上下文的绑定。
72.可选地,建立目标程序代码与缓存上下文之间的绑定关系之前,如果目标程序代码之前存在其他缓存上下文,会先解除与之前其他缓存上下文的绑定。
73.作为一种可选的实施方式,步骤s204,在执行目标程序代码,得到执行结果之后,方法还包括:解除目标程序代码与缓存上下文之间的绑定关系。
74.在该实施例中,在执行目标程序代码,得到执行结果之后,会清理当前缓存上下文,包括解绑缓存上下文与当前目标程序代码的绑定关系,如果在此目标程序代码执行之前存在缓存上下文,此时会将之前缓存上下文绑定到当前的目标程序代码。
75.作为一种可选的实施方式,基于第二目标标识生成缓存上下文,其中,第二目标标识用于声明缓存入口,缓存入口用于确定目标存储空间。
76.在该实施例中,基于第二目标标识生成缓存上下文,其中,第二目标标识可以为缓存入口注解,用于声明缓存入口;缓存入口用于确定目标存储空间,可以用l1cacheentrance表示。
77.可选地,如果目标程序上存在第二目标标识,则会被切面模块处理。
78.可选地,在同一个方法调用栈中,第二目标标识可以重复出现在不同的目标程序代码上,重复出现时,上层方法的目标程序代码将覆盖下层方法的目标程序代码,且上层目标程序代码的第二目标标识可以选择禁用一级缓存或继承下层栈帧中一级缓存的配置,其中,上层可以表示调用方,下层可以表示被调用方。
79.作为一种可选的实施方式,步骤s204,确定未从目标存储空间中调用到目标程序代码的执行结果,包括:响应于未获取到目标程序代码绑定的缓存上下文,或者,获取到目标程序代码绑定的缓存上下文,且缓存上下文声明了禁止使用目标存储空间的执行结果,确定未从目标存储空间中调用到执行结果,其中,缓存上下文用于表征将执行结果写入至目标存储空间。
80.在该实施例中,如果未获取到目标程序代码绑定的缓存上下文,或者,获取到目标程序代码绑定的缓存上下文,且缓存上下文声明了禁止使用目标存储空间的执行结果,则可以确定未从目标存储空间中调用到执行结果,其中,缓存上下文中的数据可以用于将执行结果写入至目标存储空间
81.可选地,如果目标程序代码不存在绑定的缓存上下文,或者,缓存上下文中声明了禁止使用目标存储空间的执行结果,则可以确定未从目标存储空间中调用到执行结果。
82.作为一种可选的实施方式,响应于识别到目标程序代码对应的第三目标标识,从目标存储空间中读取到执行结果,其中,第三目标标识用于声明从目标存储空间中读取到执行结果。
83.在该实施例中,识别到目标程序代码对应的第三目标标识,则从目标存储空间中读取到执行结果,其中,第三目标标识可以用l1cacheread表示,又可以称为读操作缓存,可以用于声明从目标存储空间中读取到执行结果。
84.可选地,识别到目标程序代码对应的第三目标标识,则从目标存储空间中读取执行结果,如果执行结果存在则直接返回给上层方法调用;如不存在则执行目标程序代码。
85.作为一种可选的实施方式,步骤s206,将执行结果写入至目标存储空间,包括:响应于识别到目标程序代码对应的第四目标标识,将执行结果写入至目标存储空间,其中,第四目标标识用于声明将执行结果写入至目标存储空间。
86.在该实施例中,对目标程序代码的目标标识进行识别,当识别出第四目标标识时,将执行结果写入至目标存储空间,其中,第四目标标识可以为l1cachewrite,又可以称为写操作缓存,可以用于声明将执行结果写入至目标存储空间,可以通过第四目标标识中的注解参数控制执行结果在目标存储空间中的生效时长,不声明则在目标程序代码退出调用前执行结果将一直生效。
87.作为一种可选的实施方式,响应于识别到目标程序代码对应的第五目标标识,将执行结果从目标存储空间中删除,其中,第五目标标识用于声明将执行结果从目标存储空间中删除。
88.在该实施例中,对目标程序代码的目标标识进行识别,当识别出第五目标标识时,将执行结果从目标存储空间中删除,其中,第五目标标识可以为l1cachedelete,又可以称为删除操作缓存,可以用于声明将执行结果从目标存储空间中删除。
89.可选地,第五目标标识声明了删除缓存操作,可以目标存储空间中清理指定的目标程序代码对应的执行结果,可以通过参数控制在执行目标程序代码前或执行方法目标程序代码后删除执行结果。
90.作为一种可选的实施方式,目标存储空间为一级缓存存储空间。
91.在该实施例中,检测当前待执行的目标程序代码;响应于目标程序代码由对应的第一目标标识进行标识,且确定未从目标存储空间中调用到目标程序代码的执行结果,执行目标程序代码,得到执行结果;将执行结果写入至目标存储空间,以作为与目标程序代码关联的待执行程序代码的待调用数据。也就是说,本发明在将缓存的处理操作抽取到切面编程的切面中的基础上,利用对目标程序代码进行标记的方式,在目标程序代码的执行结果返回后,将目标程序代码的执行结果写入目标存储空间;并在下次目标程序代码执行前,从目标存储空间中读取已缓存的执行结果,并返回给上层方法调用,从而实现了降低数据缓存的局限性的技术效果,解决了数据缓存的局限性大的技术问题。
92.下面结合优选的实施方式对本发明实施例的技术方案进行进一步地举例介绍。
93.在目前互联网应用设计中,为了实现快速在设备间进行数据的迁移,往往采用服务端存储数据、客户端请求服务端接口进行数据读写的方案,即,单个服务端应用向多个客户端应用提供服务,服务端常用的数据持久化中间件一般是数据库,其数据存储在计算机外置存储器上,如机械硬盘、固态硬盘等,但是相较于内存访问而言,外置存储器访问速度
普遍较低,一般会低1到2个数量级,比如,主流的第五代双倍资料率同步动态随机存取记忆体内存(double date rate fifth-generation synchronous dynamic random-access memory,简称为ddr5 sdram)的读写速度在100gb/s以上,而质量较好的固态硬盘读写速度也只在3gb/s左右,因此,在读请求较频繁时,服务端的请求处理能力受限于数据库的读操作,磁盘访问成为服务器并发能力的瓶颈,从而为了提高读取数据的速度,服务端往往会使用内存缓存来减少数据的读取访问次数。
94.常见的内存缓存实现方案有两种:一种是仅在单个请求处理过程中的内存缓存,可以称为一级缓存;一种是在整个应用范围内的内存缓存,不限于单个请求,称为二级缓存,也是广义上的缓存。
95.二级缓存是对不同请求生效的,即,一次读请求导致数据从数据库被读取,这部分数据被写入到缓存后,其他读请求也可以命中该缓存,不需要读取数据库,从而可以有效减少请求处理耗时,但在一些场景下,仅希望在当前请求范围内进行数据缓存,比如,对于写多读少的数据,一次请求处理过程中希望多次读取数据时能够命中缓存从而提高读操作速度,但又因为数据易变希望其他请求能够读取到最新数据,此场景下如果使用二级缓存去处理,会导致缓存的频繁读写,且二级缓存一般使用支持分布式的缓存中间件来实现,比如远程字典服务(redis)、无堵塞通信服务(memcached),频繁的缓存读写会产生网络开销,在复杂的网络环境下有可能比直接读取数据库更加耗时,因此数据写多读少,且希望使用缓存的场景更适用一级缓存,不仅是数据库访问,还包括服务间远程调用的场景。
96.现有常见的一级缓存有高性能缓存(caffeinecache)、分布式缓存(ehcache)、持久化框架一级缓存(mybatis)等。
97.分布式缓存是一种对象存储方案,可以通过将程序运行期间的对象数据序列化为二进制数据流,然后进行存储,分布式缓存支持设置对象存储的过期时间、对象清除策略等,另外在内存不足以存储大量数据时,还支持使用磁盘作为不常用的冷数据的交换区,提高存储能力上限。
98.高性能缓存与分布式缓存类似,是一种对象存储技术,支持设置存储过期时间、对象清除策略,但不支持存储至文件。
99.持久化框架一级缓存是基于持久化框架实现的一种上层缓存技术,它专注于缓存的读、写、清除时机等上层能力,而并不在意底层对象存储的实现细节,因此持久化框架一级缓存底层可以适配多种对象存储方案,比如,可以使用上文提到的高性能缓存与分布式缓存,甚至直接使用哈希表(hashmap)进行存储。
100.但是高性能缓存和分布式缓存都属于一级缓存的底层实现,使用时需要在程序运行的逻辑前后手动编码进行缓存的写入与读取,上述操作容易产生大量重复代码,且重复代码会导致开发效率降低,不利于代码阅读,会分散对核心逻辑的注意力,单独实现一种一级缓存,可能无法适应复杂多变的运行场景,当对一级缓存的需求产生变更时,修改代码变得极为困难,比如某场景下首先选择了高性能缓存作为一级缓存,当工作量递增后缓存数据量增大,内存资源不足需要使用文件进行缓存而切换至分布式缓存时,会需要修改运行流程,破坏了面向对象中的开闭原则。
101.持久化框架一级缓存对底层的对象存储进行了抽象,可以随时更换对象存储方案,更换缓存变得方便,而且持久化框架一级缓存对缓存的写入、读取操作进行了封装,利
用计算机语言,比如开发应用程序(java)语言中的动态代理技术和对业务逻辑无侵入的aop编程方法,避免了手动操作一级缓存,减少了重复代码。但持久化框架一级缓存是专为持久化框架设计的,仅在通过持久化框架进行数据库访问时才能使用,而工作场景中可能会使用其他框架,比如hibernate、持久化框架plus、springdatajpa等,因此局限性较大,且需要使用一级缓存的场景不仅仅是数据库访问,微服务架构下,远程过程调用(remote procedure call,简称为rpc)在调用结果时也要考虑使用缓存,此时持久化框架一级缓存不再适用。
102.为解决上述问题,本发明实施例提出一种适用于多种数据访问场景、适用多种对象存储方式的一级缓存实现方案,该方案提供了一套对象存储操作的抽象接口,此抽象接口用于屏蔽底层的对象存储方案实现细节,用于对上层缓存操作模块提供统一的对象存储操作函数;另外还提供了一套一级缓存操作的标记方式,该标记方式在java语言中以注解形式存在,利用开发应用程序语言提供的动态代理机制拦截被指定注解标记的方法,在方法执行前动态计算缓存key,并在方法执行返回后,将方法的返回值写入当前线程栈关联的内存空间;并在下次方法执行前,拦截方法调用,从当前线程栈关联的内存空间中读取已缓存的值返回给上层方法调用,达到一级缓存的效果,解决了使用高性能缓存和分布式缓存时需要进行编写大量样板代码的问题,使用了和持久化框架一级缓存一样的动态代理技术,统一封装缓存操作模块,但又解决了持久化框架一级缓存适用场景狭窄的缺点
103.下面对该实施例的上述方法进行进一步介绍。
104.图3是根据本发明其中一实施例的一种数据处理组件模块的示意图,如图3所示,组件模块从下至上依次为:对象存储模块、缓存抽象模块、aop切面模块、启动模块(spring starter模块),其中,上层依赖下层抽象接口,外部应用依赖启动模块。
105.可选地,对象存储模块是缓存抽象模块的实现,根据实际选择的底层对象存储方案不同,有不同的接口实现,可以有基于哈希表实现的对象存储和基于高性能实现的对象存储。
106.可选地,缓存抽象模块是缓存接口的定义,属于上层应用编程接口,此模块中不涉及具体实现,仅通过接口定义缓存所需的功能,缓存模块内部可再次细分为配置存储模块、缓存key求值器模块等。
107.可选地,面向切面编程模块是利用动态代理技术在被缓存方法执行前后执行逻辑的抽取,使用统一切面的方法减少重复代码,可以使用的面向切面编程技术中的aspectj实现,aspectj是开发应用程序语言中很稳定的面向切面编程的扩展框架,受支持广泛,aspectj在编译期间将切面编程的逻辑编译到生成的字节码中,对原有代码无侵入性,修改逻辑方便且无副作用。
108.可选地,启动模块是一个工具模块,用于在使用快速配置框架(spring-boot)中快速接入本发明实施例的方法,通过启动模块能够简化开发的配置工作,提高开发效率。
109.在本发明实施例中,将一级缓存操作定义为read、write、delet三种,对应缓存的读、写、删除操作,并定义了5种一级缓存操作注解,可以包括:入口定义缓存操作、读缓存操作、写缓存操作、删除缓存操作和读写缓存操作。
110.可选地,l1cacheentrance此注解用于声明一级缓存入口,图4是根据本发明其中一实施例的一种入口缓存操作注解类图的示意图,如图4所示,此在方法调用栈中,被此注
解标记的方法栈帧之上的栈帧中,如果方法上存在一级缓存操作注解,将会被aop切面模块处理。在同一个方法调用栈中,缓存入口注解可以重复出现在不同栈帧的方法上,重复出现时,上层方法栈帧的入口注解配置将覆盖下层的配置,且上层栈帧的入口注解可以选择禁用一级缓存或继承下层栈帧中一级缓存的配置。
111.可选地,l1cacheread此注解声明了读缓存操作,图5是根据本发明其中一实施例的一种读缓存操作注解类图的示意图,如图5所示,执行方法前会先调用根据key读取缓存,如果对应的结果存在则使用已缓存的值,缓存的key通过缓存key求值器模块计算。
112.可选地,l1cachewrite此注解声明了写缓存操作,图6是根据本发明其中一实施例的一种写缓存操作注解类图的示意图,如图6所示,该注解将被标记方法调用时的返回值写入当前线程栈的缓存当中。可以通过注解参数控制此返回值在一级缓存中的生效时长,不声明则在缓存入口方法退出调用栈前将一直生效。当方法返回null值时,可以通过参数控制是否将null值写入缓存。缓存的key通过缓存key求值器模块计算。
113.可选地,l1cachedelete此注解声明了删除缓存操作,图7是根据本发明其中一实施例的一种删除缓存操作注解类图的示意图,如图7所示,该注解会从当前方法栈的一级缓存中清理指定key对应的值,可以通过参数控制在执行方法前或执行方法后删除缓存,缓存的key通过缓存key求值器模块计算。
114.可选地,l1cacheable此注解声明了读、写两种缓存操作,图8是根据本发明其中一实施例的一种读写缓存操作注解类图的示意图,如图8所示,该注解在执行方法前读取缓存,存在则直接返回,不存在则执行方法并将返回值写入缓存中,此注解参数集成读缓存操作和写缓存操作两种,作用相同。
115.下面对该实施例的l1cacheentrance注解标记的方法执行过程进行进一步介绍。
116.图9是根据本发明其中一实施例的一种入口定义缓存操作注解标记方法执行的示意图,如图9所示,l1cacheentrance注解标记的方法执行可以包括以下步骤。
117.步骤s901,生成方法栈的缓存上下文。
118.调用入口注解标记的方法,并将此方法进入方法栈,根据代码编写时,入口注解中标记的方法填写指定的参数,生成一个缓存上下文,该上下文存储了缓存入口方法、缓存操作管理器等相关数据,如果在此之前,方法栈中已经绑定了一个缓存上下文,可以选择继承之前的缓存上下文,也可以选择开启新的缓存上下文。开启新的上下文后,从当前方法栈帧开始,之后的方法栈帧中的缓存操作,均只作用于新生成的缓存上下文,对之前的上下文无影响。
119.步骤s902,建立缓存上下文与当前线程之间的绑定关系。
120.生成方法栈的缓存上下文之后,建立缓存上下文与当前线程之间的绑定关系,这里使用了开发应用程序的语言中的线程本地变量来实现绑定,线程本地变量是一种变量引用,其可以保证在不同方法栈中访问此变量时,引用了不同的变量实例,不会互相影响,如果在此方法进入之前存在缓存上下文,会先解除与之前缓存上下文的绑定。
121.步骤s903,执行被标记的方法。
122.执行被标记的方法,此时被标记方法真正进入方法栈。
123.步骤s904,清理当前缓存上下文。
124.在被标记方法执行完成后,清理当前缓存上下文,包括解绑上下文与当前线程的
绑定关系,如果在此方法进入之前存在缓存上下文,此时会将之前缓存上下文绑定到当前方法栈。
125.在步骤s901~s904中,缓存上下文可以根据注解的参数配置,选择继承或不继承之前的上下文,能够灵活的控制方法栈中缓存的作用范围,若选择继承之前的上下文,则当前缓存上下文称为“子上下文”,被继承的上下文称为“父上下文”,并在后续的缓存查找操作中,查找已缓存值时会优先选择从父上下文中查找,父上下文不存在才会查找子上下文,对于同一个已缓存的方法,可以通过显式声明一个禁用一级缓存的入口,来实现绕开缓存直接调用方法的效果。
126.下面对该实施例的l1cacheable注解标记的方法执行过程进行进一步介绍。
127.图10是根据本发明其中一实施例的一种状态注解标记方法执行的示意图,如图10所示,l1cacheable注解标记的方法可以包括以下步骤。
128.步骤s1001,读取当前方法栈绑定的缓存上下文方法栈缓存是否开启。
129.读取当前方法栈绑定的缓存上下文,如缓存上下文不存在或声明了禁用缓存,即,当前方法栈绑定的缓存上下文方法栈缓存未开启,则执行步骤s1005,将直接通过开发应用程序语言的反射机制,调用方法引用来执行被标记的方法,并在被标记的方法调用返回结果后,将结果返回给上层方法调用,退出方法栈帧。
130.步骤s1002,解析注解参数。
131.确定方法栈绑定的缓存上下文方法栈缓存已开启,则根据注解参数,解析被标记方法操作缓存时使用的参数,如使用的key表达式、key求值器、缓存有效期等,根据key表达式和key求值器来计算真正操作的缓存key。
132.步骤s1003,执行读取缓存操作。
133.执行读取缓存操作,确定缓存key对应的执行结果是否存在。
134.步骤s1004,判断是否存在已缓存的值
135.判断缓存key对应的value是否存在,如果存在,则执行步骤s1007,直接返回给上层方法调用,退出方法栈帧;如果不存在则执行s1005调用被标记的方法,此时被标记的方法才真正进入方法栈执行。
136.步骤s1005,执行方法。
137.步骤s1006,获取方法返回值,执行写入缓存操作。
138.将步骤s1005方法执行的结果写入缓存,执行写入操作将返回值写入当前方法栈关联的内存区域(也即线程本地变量),用于后续读取时使用,写入缓存前,如果注解参数配置了忽略被标记方法返回的无效值,且s1004步骤被标记方法执行后也返回了无效值,则写入缓存操作会被中止。
139.步骤s1007,返回读取到的值至读写缓存操作,标记的方法退出方法栈。
140.直接返回给上层方法调用,退出方法栈帧。
141.在步骤s1001~s1007中,缓存key的是通过求值器来计算的,写入缓存后,后续如果调用了,将不会执行被标记方法的逻辑,而是直接使用已缓存的值,能够有效减少方法调用,提高程序运行速度,在互联网环境中使用时,能够提高服务的吞吐能力。
142.在本发明实施例中,将缓存的处理操作抽取到aop切面中,减少了常规开发过程中缓存读写产生的大量重复代码,大大提高了开发效率,缓存处理逻辑在aop切面中,对原有
代码逻辑无侵入,能够很方便的在原有项目中集成本发明的方案,也能使开发人员更关注于业务流程。
143.可选地,步骤s1001,利用了缓存key求值器,可以灵活的使用各种脚本语言来进行处理,比如表达式语言(spel)、解释型编程语言(javascript)、轻量型脚本语言(lua)等,且求值器模块是一个抽象模块,缓存模块中仅依赖求值器接口,可以很方便的扩展出更多的脚本语言支持。
144.可选地,通过步骤s1006,在原方法调用栈退出后插入了缓存写入操作,能够暂存方法返回值到缓存中,并绑定到当前方法调用栈。再次调用l1cacheable或l1cacheread注解标记的方法时,如果且计算出的缓存key相同的话,通过步骤s1003,会在原方法调用栈进入前插入了缓存读取操作,不再执行真实方法调用,直接返回暂存的值,从而减少了原方法的调用次数,能够有效的降低原方法执行过程中的重要处理器和内存开销,有效的减少了整个方法栈的执行耗时,在互联网环境中使用时,能提高了服务器的响应速度,从而使开发应用程序服务器得到更高的负载能力。
145.在本发明实施例中,缓存key求值器模块中,本发明采用了表达式脚本语言来实现。求值器模块的使用是面向接口的,由于表达式脚本语言的解释器和执行器均由java实现,且spring框架对其提供长期支持,所以首选表达式脚本语言来实现缓存key求值器。
146.面向切面编程的切面模块中,本发明实施例采用的是面向切面的框架(aspectj)进行动态代理,在实际实现过程中,可以采用其他面向切面编程技术,如开发工具包(jave development toolkit,简称为jdk)动态代理、cglib等,但由于开发工具包的动态代理需要依赖具体接口,使用起来并不灵活;cglib需要在运行期动态生成字节码效率相比面向切面的框架的静态织入性能稍低,本发明实施例最终选择面向切面的框架作为动态代理的实现,从而实现了提高开发效率的技术效果,解决了开发效率低的技术问题。
147.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
148.本发明实施例还提供了一种数据处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“单元”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
149.图11是根据本发明实施例的一种数据处理装置的结构框图,该装置可以应用于存储操作模块,存储操作模块由面向切面编程得到,如图11所示,该数据处理装置1100可以包括:检测单元1101、执行单元1102和写入单元1103。
150.检测单元1101,用于检测当前时间待执行到的目标程序代码。
151.执行单元1102,用于响应于目标程序代码由对应的第一目标标识进行标识,且确定未从目标存储空间中调用到目标程序代码的执行结果,执行目标程序代码,得到执行结果。
152.写入单元1103,用于将执行结果写入至目标存储空间,以作为与目标程序代码关联的待执行程序代码的待调用数据。
153.在该实施例的数据处理装置中,通过检测单元,检测当前待执行的目标程序代码;通过执行单元,响应于目标程序代码由对应的第一目标标识进行标识,且确定未从目标存储空间中调用到目标程序代码的执行结果,执行目标程序代码,得到执行结果;通过写入单元,将执行结果写入至目标存储空间,以作为与目标程序代码关联的待执行程序代码的待调用数据。也就是说,本发明在将缓存的处理操作抽取到切面编程的切面中的基础上,利用对目标程序代码进行标记的方式,在目标程序代码的执行结果返回后,将目标程序代码的执行结果写入目标存储空间;并在下次目标程序代码执行前,从目标存储空间中读取已缓存的执行结果,并返回给上层方法调用,从而实现了降低数据缓存的局限性的技术效果,解决了数据缓存的局限性大的技术问题。
154.需要说明的是,上述各个单元是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述单元均位于同一处理器中;或者,上述各个单元以任意组合的形式分别位于不同的处理器中。
155.本发明的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
156.可选地,在本实施例中,上述计算机可读存储介质可以被设置为存储用于执行以下步骤的计算机程序:
157.s1,检测当前待执行的目标程序代码;
158.s2,响应于目标程序代码由对应的第一目标标识进行标识,且确定未从目标存储空间中调用到目标程序代码的执行结果,执行目标程序代码,得到执行结果;
159.s3,将执行结果写入至目标存储空间,以作为与目标程序代码关联的待执行程序代码的待调用数据。
160.可选地,在本实施例中,上述计算机可读存储介质可以包括但不限于:u盘、只读存储器(read-only memory,简称为rom)、随机存取存储器(random access memory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
161.本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
162.可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
163.可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
164.s1,检测当前待执行的目标程序代码;
165.s2,响应于目标程序代码由对应的第一目标标识进行标识,且确定未从目标存储空间中调用到目标程序代码的执行结果,执行目标程序代码,得到执行结果;
166.s3,将执行结果写入至目标存储空间,以作为与目标程序代码关联的待执行程序代码的待调用数据。
167.可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的
示例,本实施例在此不再赘述。
168.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
169.在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
170.在本技术所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
171.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
172.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
173.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
174.以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1