2024年4月27日发(作者:)
(19)中华人民共和国国家知识产权局
(12)发明专利说明书
(21)申请号 CN2.3
(22)申请日 2011.09.09
(71)申请人 北京大学;北大方正集团有限公司;方正国际软件(北京)有限公司
地址 100871 北京市海淀区颐和园路5号
(72)发明人 乐以长 梁学勇 陈永华
(74)专利代理机构 北京天悦专利代理事务所(普通合伙)
代理人 田明
(51)
(10)申请公布号 CN 102999319 A
(43)申请公布日 2013.03.27
权利要求说明书 说明书 幅图
(54)发明名称
一种基于AOP技术缓存函数执行
结果的方法及系统
(57)摘要
本发明公开了一种基于AOP技术
缓存函数执行结果的方法及系统,该方法
及系统利用Spring开发框架提供的AOP功
能实现,在需要缓存执行结果的业务逻辑
处理函数前后执行Spring AOP的缓存处理
通知,拦截被执行的业务逻辑处理函数,
将业务逻辑处理函数的执行结果存入数据
缓存装置。另外,该方法在业务逻辑处理
函数更新目标数据(如追加、修改、删除数
据)之后执行Spring AOP的缓存清除通
知,清空数据缓存装置的数据。使用该方
法将缓存功能模块和业务逻辑功能模块彻
底解耦,实现可插拔的缓存机制,灵活地
通过配置文件给业务逻辑处理函数增加或
去除缓存功能。
法律状态
法律状态公告日
法律状态信息
专利权的转移IPC(主分类):G06F
9/44专利号:ZL2登
记生效日:20230615变更事项:专
利权人变更前权利人:北京大学变
更后权利人:北京大学变更事项:
地址变更前权利人:100871 北京
2023-06-27
市海淀区颐和园路5号变更后权
利人:100871 北京市海淀区颐和
园路5号变更事项:专利权人变更
前权利人:北大方正集团有限公司
方正国际软件(北京)有限公司变
更后权利人:新方正控股发展有限
责任公司 方正国际软件(北京)有
限公司
法律状态
专利申请权、专利权
的转移
权 利 要 求 说 明 书
1.一种基于AOP技术缓存函数执行结果的方法,包括以下步骤:
步骤1、调用业务逻辑处理函数,并由特征码生成装置生成该业务逻辑
步骤2、根据业务逻辑处理函数的实例特征码,在数据缓存装置中检索
步骤3、从数据缓存装置中得到缓存的函数执行结果,进入步骤5;
步骤4、执行所述业务逻辑处理函数,并将得到的函数执行结果缓存到
步骤5、将函数执行结果返回给业务逻辑处理函数的调用方。
2.如权利要求1所述的一种基于AOP技术缓存函数执行结果的方法,其
3.如权利要求2所述的一种基于AOP技术缓存函数执行结果的方法,其
特征在于:清除函数所在类对应的数据的具体步骤为:
数据缓存装置;
处理函数唯一的实例特征码;
是否存在该函数的函数执行结果,若是则进入步骤3,若否则进入步骤4;
特征在于:如果步骤1中所调用的业务逻辑处理函数为更新目标数据的函数,
会将数据缓存装置中该函数所在类对应的缓存数据进行清除。
1)调用修改目标数据的业务逻辑处理函数;
2)执行所调用的更新目标数据的业务逻辑处理函数,并获取被执行函数
3)获取数据缓存装置的函数实例特征码列表,将实例特征码列表中的每
4.如权利要求1或2或3所述的一种基于AOP技术缓存函数执行结果的
5.如权利要求1或2或3所述的一种基于AOP技术缓存函数执行结果的
6.如权利要求5所述的一种基于AOP技术缓存函数执行结果的方法,其
的
所在类名;
个函数实例特征码与步骤2)被执行函数所在类名进行对比,并删除数据缓
存装置中以被执行函数所在类名开头的实例特征码所对应的缓存数据。
方法,其特征在于:步骤1中,所述业务逻辑处理函数为面向对象开发语言
Java语言的对象成员函数。
方法,其特征在于:步骤1中,所述的实例特征码是根据函数实例的类名、
函数名和参数信息生成的,以类名开头的唯一的函数实例特征码。
特征在于:所述参数是Java语言的基本数据类型、数组或对象类型,参数
个数为一个、多个或者没有。
7.如权利要求1或2或3所述的一种基于AOP技术缓存函数执行结果的
方法,其特征在于:在数据缓存装置中检索函数执行结果是以函数的实例特
征码为依据进行的,在缓存时是以实例特征码为主键将函数执
数据缓存装置的。 行结果存入到
8.如权利要求1所述的一种基于AOP技术缓存函数执行结果的方法,其
9.如权利要求2所述的一种基于AOP技术缓存函数执行结果的方法,其
10.如权利要求1或2或3所述的一种基于AOP技术缓存函数执行结果
特征在于:步骤4中,当业务逻辑处理函数的处理结果为有效数据类型的返
回值时,才对函数执行结果进行缓存。
特征在于:所述更新目标数据的函数包括追加函数、修改函数或删除函数。
的方法,其特征在于:如果要对业务逻辑处理函数的函数执行结果进行缓存
或者对更新目标数据的函数进行数据清除,需要在Spring配
数的函数名设置为切入点,并在切入点进行函数
据的清除。
置文件中将此函
执行结果的缓存或者缓存数
11.一种基于AOP技术缓存函数执行结果的系统,包括:
特征码生成装置:用于生成所调用的业务逻辑处理函数的唯一的实例特征
数据缓存装置:用于保存函数执行结果;
缓存处理通知装置:用于在数据缓存装置中检索是否存在实例特征码所对
果
应的函数执行结果;若是则从数据缓存装置获得该实例特征码对应的执行结
并返回给调用方;若否则执行业务逻辑处理函数,将函数执行
缓存装置中,并将函数执行结果返回给调用方;
码;
结果保存到数据
缓存清除通知装置:用于在业务逻辑处理函数为更新目标数据的函数时,
12.如权利要求11所述的一种基于AOP技术缓存函数执行结果的系统,
清除数据缓存装置中该函数所在类对应的缓存数据。
其特征在于:所述函数实例特征码是根据所调用的业务逻辑处理函数的函数
实例的类名、函数名及参数信息生成的,以类名开头的唯一的
码。 函数实例特征
13.如权利要求11或12所述的一种基于AOP技术缓存函数执行结果的
系统,其特征在于:对缓存处理通知装置和缓存清除通知装置,需要在
配置文件中将要调用的业务逻辑处理函数的函数名设置为切入Spring
点,并在此切
入点执行数据的缓存或清除。
14.如权利要求11或12或13所述的一种基于AOP技术缓存函数执行结
果的系统,其特征在于:缓存处理通知装置进行数据的检索是以实例特征码
将函数执行结
为依据进行的,在缓存函数执行结果时是以实例特征码为主键
果保存到数据缓存装置中的。
说 明 书
技术领域
本发明涉及计算机信息处理、软件开发领域,具体涉及一种基于AOP(Aspect
背景技术
在软件开发过程中,函数是程序的最小单元,大的软件系统都是由许多函
行
数依据一定的业务逻辑组装而成,函数的执行速度决定了整个软件系统的运
效率。通常情况下,函数被调用时依据程序逻辑从函数开头执行整个
从而得到整个函数的计算结果,这在数据变化快的场合是完全
一些应用场合,如企业业务系统中的系统数据像组织机
这些数据通常保存在关系数据库系统中,一般情
改变。只要数据不改变多次查询相关信息
比较消耗计算机资源,重复相同的
应用系统运行越慢。在软件
用于粗粒度数据的缓
数据一次性读
角色、
Oriented Programming,面向方面编程)技术缓存函数执行结果的方法及系统。
函数体,
必要的。但是在
构、人员及权限数据等,
况下这些数据很长时间不会被
得到的结果往往是相同的,一些操作
操作对性能影响很大,使用系统的人越多、
设计中缓存技术广泛采用,但是目前的缓存技术适
存,如上述组织机构信息,通常都是在系统启动时将所有
入缓存;但是对于一些细粒度数据像权限数据,每个用户、每个
针对不同的操作对象权限都不一样,一些权限需要进行复杂的运算才能
前
得到,类似这样的数据难以做到一次性将所有数据加载到缓存中。另外,目
的缓存都是硬编码在业务逻辑功能模块的程序代码中,为了追加缓存
要对应用程序代码进行修改,这样缓存功能模块和业务逻辑功
如果要追加缓存功能或去掉缓存功能均要修改程序,重
力,非常不方便。
功能,需
能模块紧密耦合,
新编译和调试,费时费
发明内容
为了解决现有缓存技术存在的难以对细粒度数据进行缓存以及缓存处理
功能模块和业务逻辑功能模块紧密耦合的问题,本发明的目的在于提供一种
基于AOP技术缓存函数执行结果的方法
粒度的缓存,大幅度的提高系统运
缓存的数据就越多,系统运
及系统,从而实现企业应用系统数据细
行性能,使得业务系统使用的人越多,被
行地越快。
为实现上述目的,本发明采用的技术方案如下:
一种基于AOP技术缓存函数执行结果的方法,包括以下步骤:
步骤1、调用业务逻辑处理函数,并由特征码生成装置生成该业务逻辑
步骤2、根据业务逻辑处理函数的实例特征码,在数据缓存装置中检索
步骤3、从数据缓存装置中得到缓存的函数执行结果,进入步骤5;
步骤4、执行所述业务逻辑处理函数,并将得到的函数执行结果缓存到
步骤5、将函数执行结果返回给业务逻辑处理函数的调用方。
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,如果
步骤1中所调用的业务逻辑处理函数为更新目标数据的函数,会将数据缓存
数据缓存装置;
是否存在该函数的函数执行结果,若是则进入步骤3,若否则进入步骤4;
处理函数唯一的实例特征码;
装置中该函数所在类对应的缓存数据进行清除。
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,清除
1)调用修改目标数据的业务逻辑处理函数;
2)执行所调用的更新目标数据的业务逻辑处理函数,并获取被执行函数
3)获取数据缓存装置的函数实例特征码列表,将实例特征码列表中的每
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,步骤
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,步骤
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,所述
多
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,在数
据缓存装置中检索函数执行结果是以函数的实例特征码为依据进行的,在缓
参数是Java语言的基本数据类型、数组或对象类型,参数的个数为一个、
个或者没有。
1中,实例特征码是根据函数实例的类名、函数名和参数信息生成的,以类
名开头的唯一的函数实例特征码。
1中,所述业务逻辑处理函数为面向对象开发语言Java语言的对象成员函数。
个函数实例特征码与步骤2)被执行函数所在类名进行对比,并删除数据缓
存装置中以被执行函数所在类名开头的实例特征码所对应的缓存数据。
所在类名;
函数所在类对应的缓存数据的具体步骤为:
存时是以实例特征码为主键将函数执行结果存入到数据缓存装置的。
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,步骤
再进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,所
更进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,在
对业务逻辑处理函数的函数执行结果进行缓存或者对更新目标数据的函数清
除缓存数据时,需要在Spring配置文件中将此函数的函数名设置为
并在切入点进行函数执行结果的缓存或者缓存数据的清除。
述更新目标数据的函数包括追加函数、修改函数或删除函数。
4中,当业务逻辑处理函数的处理结果为有效数据类型的返回值时,才对函
数执行结果进行缓存;所述有效数据类型是指Java语言中的除void和Void
类型之外的数据类型。
切入点,
一种基于AOP技术缓存函数执行结果的系统,包括:
特征码生成装置:用于生成所调用的业务逻辑处理函数的唯一的函数实例
数据缓存装置:用于保存函数执行结果;
缓存处理通知装置:用于在数据缓存装置中检索是否存在实例特征码所对
果
应的函数执行结果;若是则从数据缓存装置获得该实例特征码对应的执行结
并返回给调用方;若否则执行业务逻辑处理函数,将函数执行结果保
缓存装置中,并将函数执行结果返回给调用方;
特征码;
存到数据
缓存清除通知装置:用于在业务逻辑处理函数为更新目标数据的函数时,
进一步,如上所述的一种基于AOP技术缓存函数执行结果的系统,所述
再进一步,如上所述的一种基于AOP技术缓存函数执行结果的系统,对
用
缓存处理通知装置或缓存清除通知装置,需要在Spring配置文件中将要调
的业务逻辑处理函数的函数名设置为切入点,并在此切入点执行数据
或清除。
函数实例特征码是根据所调用的业务逻辑处理函数的函数实例的类名、函数
名及参数信息生成的,以类名开头的唯一的函数实例特征码。
清除数据缓存装置中该函数所在类对应的缓存数据。
的缓存
更进一步,如上所述的一种基于AOP技术缓存函数执行结果的系统,在
本发明的效果在于:
1.模块解耦:采用本发明,缓存处理功能模块和业务逻辑功能模块完全独
立,通过Spring配置文件的修改即可将缓存处理功能模块应用到业务逻辑
模块中,也可以在Spring配置文件中设置对哪些对象、对象的哪些
执行结果进行缓存。
缓存处理通知装置进行数据的检索是以实例特征码为依据进行的,在缓存时
是以实例特征码为主键将函数执行结果保存到数据缓存装置中的。
功能
成员函数的
2.实现细粒度数据的缓存:以函数名和函数参数值为基础进行缓存,做到
了细粒度数据的缓存,避免了现有技术只能对粗粒度数据进行缓存的弊端。
3.随需缓存:不同于现有缓存技术一次性将所有系统数据加载到缓存中占
时
用计算机内存资源的落后方法,本发明提供随需缓存技术,函数在未被执行
不会缓存任何数据,在被执行时才将满足参数要求的执行结果缓存在
存中。 计算机内
附图说明
图1为本发明一种基于AOP技术缓存函数执行结果的系统的结构框图;
图2为本发明一种基于AOP技术缓存函数执行结果的方法的流程图;
图3为具体实施方式中缓存处理通知装置的工作流程图;
图4为具体实施方式中缓存清除通知装置的工作流程图。
具体实施方式
本发明提供了一种基于AOP技术缓存函数执行结果的方法及系统,通过
该方法及系统能够实现企业应用系统数据细粒度的缓存、通过该技术的应用,
可以大幅度的提高系统运行性能,使得业务系统使用的人越多,被缓
据就越多,系统运行地越快。 存的数
下面结合说明书附图与具体实施方式对本发明做进一步的详细说明。
图1示出了本发明具体实施方式中提供的一种基于AOP技术缓存函数执
行结果的系统的结构框图,由图中可以看出该系统主要包括数据缓存装置
12、缓存处理通知装置13、缓存清除通知装置14和特征码生成装置11;其
中:
特征码生成装置11:用于生成所调用的业务逻辑处理函数的唯一的函数
数据缓存装置12:用于保存函数执行结果;缓存处理通知装置13和缓
缓存处理通知装置13:用于在数据缓存装置12中检索是否存在实例特
应
征码所对应的函数执行结果;若是,则在数据缓存装置获得该实例特征码对
的执行结果并返回给调用方;若否,则执行业务逻辑处理函数,将函
果保存到数据缓存装置中,并将函数执行结果返回给调用方;
装置13的具体工作流程如图3所示;
存清除通知14共用相同的数据缓存装置12;
实例特征码;
数执行结
缓存处理通知
其中,缓存处理通知装置13进行数据的检索是以实例特征码为依据进行
12
缓存清除通知装置14:用于在业务逻辑处理函数为更新目标数据的函数
由于本发明中的业务逻辑处理函数是面向对象开发语言Java语言的对
置
象成员函数,对缓存处理通知装置和缓存清除通知装置,需要在Spring配
文件中将要调用的业务逻辑处理函数的函数名设置为切入点,并在此
执行数据的缓存或清除。在AOP编程中,需要在配置文件中
点(Pointcut),程序执行到切入点后,会调用在这个切入
通知是外部的程序代码,如本发明的缓存处理通知和缓
时,清除数据缓存装置中该函数所在类对应的缓存数据。
的,在缓存时是以实例特征码为主键将函数执行结果保存到数据缓存装置
中的。
切入点
为程序设置切入
点上设置的通知,
存清除通知。
图2示出了基于图1中一种基于AOP技术实现函数执行结果缓存的系统
的基于AOP技术实现函数执行结果缓存的方法的流程图,由图中可以看出,
该方法主要包括以下步骤:
步骤S21、调用业务逻辑处理函数,生成实例特征码;
调用业务逻辑处理函数,并由特征码生成装置11生成该业务逻辑处理函
函数调用实际上就是函数原型实例化的过程,将一次函数调用称为函数
实例化,函数实例以类名、函数名及传入的参数列表区分其唯一性。特征码
生成装置11根据函数实例的类名、函数名及参数列表信息生成一个
数实例特征码。由于函数的实例特征码都是唯一的,所以在数
中检索函数执行结果是以函数的实例特征码为依据进行
例特征码为主键将函数执行结果存入到数据缓存
可以通过该特征码查询其对应的函数执行
数的唯一的实例特征码。
唯一的函
据缓存装置12
的,在缓存时是以实
装置的。在操作过程中,就
结果。
其中,本发明的业务逻辑处理函数为面向对象开发语言Java语言的对象
成员函数。参数列表中的参数是Java语言的基本数据类型、数组或对象类
在实际的操作过程中,函数可以不带参数,或者带一个或者多个参数。
型。
步骤S22、根据实例特征码检索函数执行结果;
根据业务逻辑处理函数的实例特征码,在数据缓存装置12中检索是否存
步
在该函数的函数执行结果,若是则进入步骤S23,若否则进入步骤S24。由
骤S21中可知,每一个业务逻辑处理函数都有其唯一的实例特征码,
实例特征码,用户可以在数据缓存根据该
装置中查找是否存在该实例特征码所对应
步骤S23、获取函数执行结果;
的函数的执行结果。
如果在此次调用执行步骤S21中的业务逻辑处理函数之前,已经执行过
相同的函数实例,此次调用则不需要再执行相应的业务逻辑处理函数,在步
骤S22中就可以通过在数据缓存装置12中检索得到实例特征码所对
的执行结果,进入步骤S25。 应的函数
步骤S24、执行业务逻辑处理函数,获取并保存函数执行结果;
如果在此次调用执行步骤S21中的业务逻辑处理函数之前,没有执行过
相同的函数实例,就需要执行所述业务逻辑处理函数,并将得到的函数执行
结果缓存到数据缓存装置12中,在下次执行该函数实例时,就可以
的实例特征码直接在数据缓存装置12中检索得到其函数执行
根据唯一
结果。
其中,在对业务逻辑处理函数的函数执行结果进行缓存时,需要在
配置文件中将函数的函数名设置为切入点,并在此切入点进行函数执
Spring
行结果的缓存。此外,业务逻辑函数的处理结果必须为有效数据类型(除
类型和Void之外的数据类型,例如java语言基本类型int型、float
或者对象类型String类型等)的返回值时,才对函数执行结果
void
型等,
进行缓存。
步骤S25、将函数执行结果返回给业务逻辑处理函数的调用方。
将步骤S23或者步骤S24中得到的函数执行结果返回给调用方。
对于本发明的上述方法,如果步骤S21中业务系统调用了更新目标数据
的业务逻辑处理函数时,如追加、修改或删除等函数时,将导致缓存的目标
数据出现变化,数据缓存装置12中的数据将失效,此时,缓存清除
就会清空数据缓存中相应类对应的缓存数据,其中清除缓存数
如图4所示:
通知装置
据的具体步骤
1)调用修改目标数据的业务逻辑处理函数;
2)执行所调用的更新目标数据的业务逻辑处理函数,并获取被执行函数
3)获取数据缓存装置的函数实例特征码列表,将实例特征码列表中的每
同样的,在对更新目标数据的函数清除数据时,需要在Spring配置文件
下面结合具体的实施例对本发明进行进一步详细的说明。
本实施例采用Java语言提供的HashMap作为数据缓存装置,在Spring配
<bean id=″cacheMap″class=″p″/>
本发明实施例提供的缓存处理通知装置(Advice)为Spring AOP的
Interception Around通知,实现该通知需要做以下操作:
置文件中定义HashMap的配置如下:
所在类名;
个函数实例特征码与步骤2)被执行函数所在类名进行对比,并删除数据缓
存装置中以被执行函数所在类名开头的实例特征码所对应的缓存数据。
中将此函数的函数名设置为切入点,并在此切入点执行数据的清除。
1.实现Spring的MethodInterceptor接口,本实施例将缓存处理通知
名为CacheInterceptor。
2.在Spring配置文件中定义缓存处理通知装置的配置如下:
上面的配置缓存处理通知装置cacheInterceptor引用了前面定义的
cacheMap数据缓存装置,将会把数据缓存在cacheMap中。
3.在Spring配置文件中通过RegexpMethodPointcutAdvisor将缓存处
装置配置进切入点:
上面配置的cacheAdviser表示cacheInterceptor将拦截对象成员函数名
中含“find”和“get”的函数。
本发明实施例提供的缓存清除通知装置(Advice)为Spring AOP的After
Returning通知,实现该通知需要做以下操作:
1.实现Spring的AfterReturningAdvice接口,本实施例将缓存清除通
命名为CacheClearAdvice。
2.在Spring配置文件中定义缓存清除通知装置的配置如下:
装置命
理通知
知装置
上面配置的缓存清除通知装置cacheClearAdvice引用了前面定义的
cacheMap数据缓存装置,将会把cacheMap中相应类缓存的数据清除。
3.在Spring配置文件中通过RegexpMethodPointcutAdvisor将缓存清
装置配置进切入点:
上面配置的clearAdviser表示cacheClearAdvice将拦截对象成员函数名
中含“add”、“update”和“delete”的函数。
下面通过Spring配置文件对业务逻辑模块StudentDao的函数实现缓存功
能,StudentDao有下面三个成员函数:
public List getStudentList();
public Student getStudent(String name);
public void deleteStudent(String name);
在Spring配置文件中追加StudentDao的配置,如下:
<bean id=″studentDao″class=″StudentDao″/>
除通知
在Spring配置文件中通过自动代理,将缓存处理cacheAdviser和缓存清
在进行上述配置后,在执行StudentDao的getStudentList()函数时会先通
返
过缓存处理通知装置从数据缓存装置查询执行结果,如果存在则直接将结果
回给函数调用方,无需实际执行getStudentList()函数;如果不存在则
getStudentList()函数,并将执行结果缓存在数据缓存装置中,在调用
除clearAdviser应用到上面的studentDao对象,配置如下:
执行
装
实施例1
deleteStudent()删除一个学生后,学生列表出现变化,缓存失效,缓存清除
置将会清除数据缓存装置中StudentDao类对应的数据。
第一次调用StudentDao的getStudentList()成员函数的执行过程:
步骤1、StudentDao类的getStudentList()成员函数被调用;
步骤2、缓存处理通知装置拦截被调用的业务逻辑处理函数
getStudentList(),并获取该函数所在类名“StudentDao”、函数名
“getStudentList”,本实施例不带参数,函数实例特征码生成装置将函数名
“getStudentList”作为函数实例字符串,通过散列函数得到所述函数实例字
符串的散列码“1713854531”,将类名“StudentDao”和散列码“1713854531”
组合得到函数实例特征码“StudentDao1713854531”;
步骤3、根据所述函数实例特征码“StudentDao1713854531”在数据缓存装
置cacheMap中查询函数执行结果,由于函数第一次被执行,因此无法检索
到执
行结果;
步骤4、执行业务逻辑函数getStudentList()函数,从数据库读取数据;
步骤5、以所述函数实例特征码“StudentDao1713854531”为主键将函数执
步骤6、将执行结果返回给函数调用方。
第二次及第二次以上调用函数执行过程:
步骤1、StudentDao类的getStudentList()成员函数被调用;
步骤2、缓存处理通知装置拦截被调用的业务逻辑处理函数
步骤3、根据所述函数实例特征码“StudentDao1713854531”在数据缓存装
行结果存入数据缓存装置cacheMap;
getStudentList(),并获取所在类名“StudentDao”、函数名“getStudentList”,
本实施例不带参数,函数实例特征码生成装置将函数名“getStudentList”作
为函数实例字符串,通过散列函数得到所述函数实例字符串的散列码
“1713854531”,将类名“StudentDao”和散列码“1713854531”组合得到函数
实例特征码“StudentDao1713854531”;
置cacheMap中查询函数执行结果,由于函数已经被执行一次,因此可以在
中检索到第一次执行结果; 缓存
步骤4、从数据缓存装置中获取缓存的函数执行结果;
步骤5、将步骤4得到的函数执行结果返回给函数调用方。
采用上述的一种基于AOP技术缓存函数执行结果的方法,在完成第一次函
由
数执行后,进行第二次及第二次以上的函数调用就不会实际执行
getStudentList函数去数据库读取数据而是直接从数据缓存装置获取数据,
于从内存读取比数据库磁盘读取性能更高,通过缓存机制显著提高了
效率。 函数执行
实施例2
本发明实施例提供了带一个参数的函数的缓存机制。
第一次调用函数执行过程:
步骤1、StudentDao类的getStudent(“tom”)成员函数被调用;
步骤2、缓存处理通知装置拦截被调用的业务逻辑处理函数getStudent(),
步骤3、根据所述函数实例特征码“StudentDao-1330179827”在数据缓存
装置cacheMap中查询函数执行结果,由于函数第一次被执行,因此无法检
执行结果;
并获取所在类名“StudentDao”、函数名“getStudent”以及参数“Tom”,函数
实例特征码生成装置将函数名“getStudent”和参数“Tom”组合得到函数实例
字符串“getStudentTom”,通过散列函数得到所述函数实例字符串的散列码
“-1330179827”,将类名“StudentDao”和散列码“-1330179827”组合得到函
数实例特征码“StudentDao-1330179827”;
索到
步骤4、执行getStudent(“tom”)函数,从数据库读取“Tom”的相关信
回Student对象;
步骤5、以所述函数实例特征码“StudentDao-1330179827”为主键将函数
息,返
执行结果存入数据缓存装置cacheMap;
步骤6、将执行结果返回给函数调用方。
第二次及第二次以上调用函数执行过程:
步骤1、StudentDao类的getStudent(“tom”)成员函数被调用;
步骤2、缓存处理通知装置拦截被调用的业务逻辑处理函数getStudent(),
步骤3、根据所述函数实例特征码“StudentDao-1330179827”在数据缓存
装置cacheMap中查询函数执行结果,由于函数已经被执行一次,因此可以
存中检索到第一次执行结果;
并获取所在类名“StudentDao”、函数名“getStudent”以及参数“Tom”,函数
实例特征码生成装置将函数名“getStudent”和参数“Tom”组合得到函数实例
字符串“getStudentTom”,通过散列函数得到所述函数实例字符串的散列码
“-1330179827”,将类名“StudentDao”和散列码“-1330179827”组合得到函
数实例特征码“StudentDao-1330179827”;
在缓
步骤4、从数据缓存装置中获取缓存的函数执行结果;
步骤5、将步骤4得到的函数执行结果返回给函数调用方。
实施例3
本发明实施例提供了业务逻辑删除方法使缓存数据失效的机制。
步骤1、业务逻辑删除方法deleteStudent(“Tom”)被调用,由于“Tom”
这导致getStudentList()和getStudent(“Tom”)函数的执行结果出
被删除,
现变化,缓存
中的数据将失效;
步骤2、Spring AOP执行完删除目标数据的方法后,将执行缓存清除通知
步骤3、缓存清除通知装置清除数据缓存装置cacheMap键名以“StudentDao”
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本
发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要
求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在
开头的数据。
装置,缓存清除通知装置获取被执行函数所在类名“StudentDao”;
内。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1714162209a2393613.html
评论列表(0条)