用于函数执行的缓存方法和装置的制作方法

文档序号:6584983阅读:131来源:国知局
专利名称:用于函数执行的缓存方法和装置的制作方法
技术领域
本发明涉及计算机信息处理、软件开发和程序设计领域,具体而言,涉及一种用于 函数执行的缓存方法和装置。
背景技术
在软件开发过程中,函数是程序的最小单元,大的软件系统都是由许多函数依据 一定的业务逻辑组合而成,函数的执行速度决定了整个软件系统的运行效率。通常情况下, 函数被调用时依据程序逻辑从函数开头执行整个函数体,从而得到整个函数的计算结果, 这在数据变化快的场合是完全必要的。但是在一些应用场合,如企业业务系统中的系统数据像组织机构、人员及权限数 据等,这些数据通常保存在关系数据库系统中,一般情况下这些数据很长时间不会改变。只 要数据不改变,多次查询相关信息得到的结果往往是相同的,一些操作比较消耗计算机资 源,重复相同的操作对性能影响很大,使用系统的人越多,应用系统运行越慢。在软件设计 中缓存技术广泛采用,但是目前的缓存技术适用于粗粒度数据的缓存,如上述组织机构信 息,通常都是在系统启动时将所有数据一次性读入缓存;但是对于一些细粒度数据像权限 数据,每个用户、每个角色、针对不同的操作对象,权限都不一样,一些权限需要进行复杂的 运算才能得到,类似这样的数据难以做到一次性将所有数据加载到缓存中。另外,目前的缓 存都是在函数调用端将函数执行结果进行缓存,为了增加缓存功能,需要对调用端代码进 行修改。在实现本发明过程中,发明人发现现有技术中至少存在如下问题目前的缓存技 术不支持细粒度函数执行结果的缓存,也不支持函数自管理缓存功能,如果函数调用方和 函数提供方是不同的组织,调用方往往不清楚函数提供方的业务逻辑,不能确认被调用函 数的执行结果能否被缓存及缓存的刷新时间,调用方往往不会采取缓存策略,因此影响了 其使用效果。

发明内容
本发明旨在提供一种用于函数执行的缓存方法和装置,能够解决现有技术中使用 的缓存技术不支持细粒度函数执行结果的缓存及不支持函数自管理缓存功能,如果函数调 用方和函数提供方是不同的组织,调用方往往不清楚函数提供方的业务逻辑,不能确认被 调用函数的执行结果能否被缓存及缓存的刷新时间,进而调用方往往不会采取缓存策略, 因此影响了其使用效果的问题。在本发明的实施例中,提供了一种用于函数执行的缓存方法,包括以下步骤将参数列表传入被调用函数,并根据被调用函数的函数名和参数列表得到函数实 例特征码;根据函数实例特征码在缓存模块中查询函数执行结果;若未检索到函数执行结果,执行被调用函数;
以函数实例特征码为键值将被调用函数的执行结果存入缓存模块,并返回被调用 函数的执行结果。在本发明的实施例中还提供了一种用于函数执行的缓存装置,包括调用模块,用于向被调用函数发起调用请求,其中,被调用函数具有缓存功能且返 回值为有效数据类型;特征码生成模块,用于将参数列表传入被调用函数,并根据被调用函数的函数名 和参数列表得到函数实例特征码;缓存模块,用于缓存被调用函数的执行结果;执行模块,用于根据函数实例特征码在缓存模块中查询函数执行结果,若未检索 到函数执行结果,执行被调用函数,以函数实例特征码为键值将被调用函数的执行结果存 入缓存模块,并返回被调用函数的执行结果。在上述实施例中,通过在函数优化过程中,根据函数实例特征码在缓存模块中查 询函数执行结果,若未检索到函数执行结果,执行被调用函数,并以函数实例特征码为键值 将被调用函数的执行结果存入缓存模块,并返回被调用函数的执行结果,从而使调用方根 据函数的执行结果而不需要执行被调用函数,当缓存模块中没有查询到函数的执行结果时 才执行被调用函数,细化了函数执行结果的缓存粒度,使得被调用函数不必重复的执行,提 高了函数执行的效率,克服了现有技术中使用的缓存技术不支持细粒度执行结果的缓存及 函数自管理缓存功能,如果函数调用方和函数提供方是不同的组织,调用方往往不清楚函 数提供方的业务逻辑,不能确认被调用函数的执行结果能否被缓存及缓存的刷新时间,进 而调用方往往不会采取缓存策略,因此影响了其使用效果的问题。


此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发 明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1示出了根据本发明的一个实施例的用于函数执行的缓存方法流程图;图2示出了根据本发明的一个优选实施例的用于函数执行的缓存方法流程图;图3示出了根据本发明的一个实施例的用于函数执行的缓存装置示意图。
具体实施例方式下面将参考附图并结合实施例,来详细说明本发明。图1示出了根据本发明的一个实施例的用于函数执行的缓存方法流程图,包括以 下步骤S102,将参数列表传入被调用函数,并根据被调用函数的函数名和参数列表得到 函数实例特征码;S104,根据函数实例特征码在缓存模块中查询函数执行结果;S106,若未检索到函数执行结果,执行被调用函数;S108,以函数实例特征码为键值将被调用函数的执行结果存入缓存模块,并返回 被调用函数的执行结果。在本实施例中,通过在函数优化过程中,根据函数实例特征码在缓存模块中查询函数执行结果,若未检索到函数执行结果,执行被调用函数,并以函数实例特征码为键值将 被调用函数的执行结果存入缓存模块,并返回被调用函数的执行结果,从而使调用方根据 函数的执行结果而不需要执行被调用函数,当缓存模块中没有查询到函数的执行结果时才 执行被调用函数,细化了函数执行结果的缓存粒度,使得被调用函数不必重复的执行,提高 了函数执行的效率,克服了现有技术中使用的缓存技术不支持细粒度执行结果的缓存及函 数自管理缓存功能,如果函数调用方和函数提供方是不同的组织,调用方往往不清楚函数 提供方的业务逻辑,不能确认被调用函数的执行结果能否被缓存及缓存的刷新时间,进而 调用方往往不会采取缓存策略,因此影响了其使用效果的问题。优选地,在上述用于函数执行的缓存方法中,将参数列表传入被调用函数,并根据 被调用函数的函数名和参数列表得到函数实例特征码具体包括将参数列表传入被调用函 数;将被调用函数的函数名及参数列表组合为函数实例字符串,并将函数实例字符串按照 设定的散列算法转换为散列码作为函数实例特征码。优选地,在上述用于函数执行的缓存方法中,还包括以下步骤若检索到函数执行 结果,获取缓存的函数执行结果并返回。优选地,在上述用于函数执行的缓存方法中,被调用函数为面向过程开发语言的 函数或面向对象开发语言的对象成员函数。优选地,在上述用于函数执行的缓存方法中,参数列表包括以下至少一种基本数 据类型、数组、结构或面向对象开发语言中的对象类型。优选地,在上述用于函数执行的缓存方法中,当以函数实例特征码为键值将被调 用函数的执行结果存入缓存模块时,还包括以下步骤在缓存模块中保存被调用函数的执 行时间的时间戳。优选地,在上述用于函数执行的缓存方法中,还包括以下步骤根据时间戳判断保 存在缓存中的调用函数的执行结果是否超时;如果超时,重新执行被调用函数。图2示出了根据本发明的一个优选实施例的用于函数执行的缓存方法流程图。如 图2所示,当被调用函数为不带参数的函数的缓存机制时,调用函数的执行过程如下所示函数调用装置调用函数名为“function”的函数,由于函数没有参数,因此函数描 述为 “function ()”。第一次调用过程如下S201,由于被调用函数没有参数,函数特征码生成装置将函数名“function” 作为函数实例字符串,通过散列函数将所述函数实例字符串转换为函数实例特征码 “1380938712”;S202,根据函数实例特征码在预置的缓存装置中查询函数执行结果;S203,判断执行结果是否存在,由于函数第一次被执行,因此无法在缓存装置中检 索到执行结果,转入步骤S205;S205,按照函数正常的业务逻辑执行函数体,进行函数计算;S206,判断计算结果是否出现异常,如果计算过程出现异常,则转至步骤S209,否 则进入步骤S207 ;S207,以函数实例特征码为键值将函数执行结果存入预置的缓存装置;S208,将执行结果返回给函数调用装置;
S209,抛出异常。第二次及第二次以上调用函数的执行过程如下所示S201,函数特征码生成装置将函数名“function”作为函数实例字符串,通过散列 函数将所述函数实例字符串转换为函数实例特征码“1380938712”;S202,根据所述函数实例特征码在预置的缓存装置中查询函数执行结果;S203,判断执行结果是否存在,由于函数已经被执行一次且执行成功,因此可以在 缓存中检索到第一次的执行结果,转入步骤S204 ;S204,判断缓存的函数执行结果是否已经超时,如果未超时,进入步骤S208 ;否则 执行步骤S205 ;S205,按照函数正常的业务逻辑执行函数体,进行函数计算;S206,判断计算结果是否出现异常,如果计算过程出现异常,则转至步骤S209,否 则进入步骤S207 ;S207,以函数实例特征码为键值将函数执行结果存入预置的缓存装置;S208,将执行结果返回给函数调用装置;S209,抛出异常。如图2所示,当被调用参数为带两个参数的函数时,调用函数的执行过程如下所 示被调用函数为带一个整型参数和一个字符串型参数,函数描述为“fimctionGnt nParam, String strParam) ”,整型数据为 “ 100”,字符串型数据为 “hello,,;第一次调用函数的执行过程S201,函数实例特征码生成装置将函数名“function”和函数的两个参数合并为 “fimctionlOOhello”作为函数实例字符串,通过散列函数将所述函数实例字符串转换为函 数实例特征码“-1879014055” ;S202,根据所述函数实例特征码在预置的缓存装置中查询函数执行结果;S203,判断执行结果是否存在,由于函数第一次被执行,因此无法在缓存装置中检 索到执行结果,转入步骤S205;S205,按照函数正常的业务逻辑执行函数体,进行函数计算;S206,判断计算结果是否出现异常,如果计算过程出现异常,则转至步骤S209,否 则进入步骤S207 ;S207,以函数实例特征码为键值将函数执行结果存入预置的缓存装置;S208,将执行结果返回给函数调用装置;S209,抛出异常。第二次及第二次以上调用函数的执行过程如下所示S201,函数实例特征码生成装置将函数名“function”和函数的两个参数合并为 “fimctionlOOhello”作为函数实例字符串,通过散列函数将所述函数实例字符串转换为函 数实例特征码“-1879014055” ;S202,根据所述函数实例特征码在预置的缓存装置中查询函数执行结果;S203,判断执行结果是否存在,由于函数已经被执行一次且执行成功,因此可以在 缓存中检索到第一次的执行结果,转入步骤S204 ;
S204,判断缓存的函数执行结果是否已经超时,如果未超时,进入步骤S208 ;否则 执行步骤S205 ;S205,按照函数正常的业务逻辑执行函数体,进行函数计算;S206,判断计算结果是否出现异常,如果计算过程出现异常,则转至步骤S209,否 则进入步骤S207 ;S207,以函数实例特征码为键值将函数执行结果存入预置的缓存装置;S208,将执行结果返回给函数调用装置;S209,抛出异常。在本实施例中,在完成第一次函数执行后,进行第二次以上的函数调用如果缓存 执行结果未超时,就不会执行图2所示的步骤S205,而这部分往往是最消耗计算机资源的, 通过该缓存机制提高了函数执行效率。图3示出了根据本发明的一个实施例的用于函数执行的缓存装置示意图,包括调用模块301,用于向被调用函数发起调用请求,其中,被调用函数具有缓存功能 且返回值为有效数据类型;特征码生成模块302,用于将参数列表传入被调用函数,并根据被调用函数的函数 名和参数列表得到函数实例特征码;缓存模块303,用于缓存被调用函数的执行结果;执行模块304,用于根据函数实例特征码在缓存模块中查询函数执行结果,若未检 索到函数执行结果,执行被调用函数,以函数实例特征码为键值将被调用函数的执行结果 存入缓存模块,并返回被调用函数的执行结果。在本实施例中,通过在函数优化过程中,根据函数实例特征码在缓存模块中查询 函数执行结果,若未检索到函数执行结果,执行被调用函数,并以函数实例特征码为键值将 被调用函数的执行结果存入缓存模块,并返回被调用函数的执行结果,从而使调用方根据 函数的执行结果而不需要执行被调用函数,当缓存模块中没有查询到函数的执行结果时才 执行被调用函数,细粒度执行结果的缓存及使得被调用函数不必重复的执行,提高了函数 执行的效率,克服了现有技术中使用的缓存技术不支持细粒度执行结果的缓存及不支持函 数自管理缓存功能,如果函数调用方和函数提供方是不同的组织,调用方往往不清楚函数 提供方的业务逻辑,不能确认被调用函数的执行结果能否被缓存及缓存的刷新时间,进而 调用方往往不会采取缓存策略,因此影响了其使用效果的问题。优选地,在上述用于函数执行的缓存装置中,特征码生成模块具体包括传入单 元,用于将参数列表传入被调用函数;特征码单元,用于将被调用函数的函数名及参数列表 组合为函数实例字符串,并将函数实例字符串按照设定的散列算法转换为散列码作为函数 实例特征码。优选地,在上述用于函数执行的缓存装置中,执行模块包括判断单元,用于根据 缓存模块中保存的被调用函数的执行结果的时间戳判断保存在缓存中的调用函数的执行 结果是否超时。从以上的描述中,可以看出,本发明的上述实施例实现了如下技术效果通过对函数本身增加缓存功能,而不必对调用端程序进行任何修改,提高了业务 模块的独立性、原子性。同时实现了企业应用系统的细粒度数据的缓存,可以大幅度提高系统的运行性能,使得业务系统使用的人越多,被缓存的数据就越多,系统运行得越快;提供了函数自管理缓存功能,只需在函数开始处,即原函数体之前增加是否需要 缓存的程序逻辑;在函数结束前,即原函数体之后增加将执行结果放入缓存的代码即可使 函数本身具备缓存功能;函数调用端代码不用作任何改动即可使应用系统具备缓存功能。 并且可以实现细粒度系统数据的缓存,以函数名和函数参数值为基础进行缓存,做到了细 粒度数据的缓存,避免了现有技术只能对粗粒度数据进行缓存的弊端;不同于现有缓存技术一次性将所有系统数据加载到缓存中占用计算机内存资源 的落后方法,本发明的实施例中函数在未被执行时不会缓存任何数据,在被执行时才将满 足参数要求的执行结果缓存在计算机内存中。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用 的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成 的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储 在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们 中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的 硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技 术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种用于函数执行的缓存方法,其特征在于,包括以下步骤将参数列表传入被调用函数,并根据所述被调用函数的函数名和所述参数列表得到函 数实例特征码;根据所述函数实例特征码在缓存模块中查询函数执行结果; 若未检索到所述函数执行结果,执行所述被调用函数; 以所述函数实例特征码为键值将所述被调用函数的执行 结果存入所述缓存模块,并返回所述被调用函数的执行结果。
2.根据权利要求1所述的缓存方法,其特征在于,将参数列表传入被调用函数,并根据 所述被调用函数的函数名和所述参数列表得到函数实例特征码具体包括将参数列表传入被调用函数;将所述被调用函数的函数名及所述参数列表组合为函数实例字符串,并将所述函数实 例字符串按照设定的散列算法转换为散列码作为函数实例特征码。
3.根据权利要求1所述的缓存方法,其特征在于,还包括以下步骤 若检索到所述函数执行结果,获取缓存的所述函数执行结果并返回。
4.根据权利要求1所述的缓存方法,其特征在于,所述被调用函数为面向过程开发语 言的函数或面向对象开发语言的对象成员函数。
5.根据权利要求1所述的缓存方法,其特征在于,所述参数列表包括以下至少一种 基本数据类型、数组、结构或面向对象开发语言中的对象类型。
6.根据权利要求1所述的缓存方法,其特征在于,当以所述函数实例特征码为键值将 所述被调用函数的执行结果存入所述缓存模块时,还包括以下步骤在所述缓存模块中保存所述函数实例执行时间的时间戳。
7.根据权利要求6所述的缓存方法,其特征在于,还包括以下步骤根据所述时间戳判断保存在缓存中的所述调用函数的执行结果是否超时; 如果超时,重新执行所述被调用函数。
8.一种用于函数执行的缓存装置,其特征在于,包括调用模块,用于向被调用函数发起调用请求,其中,所述被调用函数具有缓存功能且返 回值为有效数据类型;特征码生成模块,用于将参数列表传入所述被调用函数,并根据所述被调用函数的函 数名和所述参数列表得到函数实例特征码;缓存模块,用于缓存所述被调用函数的执行结果;执行模块,用于根据所述函数实例特征码在所述缓存模块中查询函数执行结果,若未 检索到所述函数执行结果,执行所述被调用函数,以所述函数实例特征码为键值将所述被 调用函数的执行结果存入所述缓存模块,并返回所述被调用函数的执行结果。
9.根据权利要求8所述的缓存装置,其特征在于,所述特征码生成模块具体包括 传入单元,用于将参数列表传入被调用函数;特征码单元,用于将所述被调用函数的函数名及所述参数列表组合为函数实例字符 串,并将所述函数实例字符串按照设定的散列算法转换为散列码作为函数实例特征码。
10.根据权利要求8所述的缓存装置,其特征在于,所述执行模块包括判断单元,用于根据所述缓存模块中保存的所述调用函数的执行结果的时间戳判断保存在缓存中的所述调用函数的执行结果是否超时。
全文摘要
本发明公开了一种用于函数执行的缓存方法和装置,其中,方法包括以下步骤将参数列表传入被调用函数,并根据被调用函数的函数名和参数列表得到函数实例特征码;根据函数实例特征码在缓存模块中查询函数执行结果;若未检索到函数执行结果,执行被调用函数;以函数实例特征码为键值将被调用函数的执行结果存入缓存模块,并返回被调用函数的执行结果。
文档编号G06F9/46GK102087613SQ20091024142
公开日2011年6月8日 申请日期2009年12月8日 优先权日2009年12月8日
发明者乐以长, 傅连舟, 陆振华 申请人:北京大学, 北京方正奥德计算机系统有限公司, 北大方正集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1