專利名稱:用于函數(shù)執(zhí)行的緩存方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)信息處理、軟件開發(fā)和程序設(shè)計(jì)領(lǐng)域,具體而言,涉及一種用于 函數(shù)執(zhí)行的緩存方法和裝置。
背景技術(shù):
在軟件開發(fā)過程中,函數(shù)是程序的最小單元,大的軟件系統(tǒng)都是由許多函數(shù)依據(jù) 一定的業(yè)務(wù)邏輯組合而成,函數(shù)的執(zhí)行速度決定了整個(gè)軟件系統(tǒng)的運(yùn)行效率。通常情況下, 函數(shù)被調(diào)用時(shí)依據(jù)程序邏輯從函數(shù)開頭執(zhí)行整個(gè)函數(shù)體,從而得到整個(gè)函數(shù)的計(jì)算結(jié)果, 這在數(shù)據(jù)變化快的場合是完全必要的。但是在一些應(yīng)用場合,如企業(yè)業(yè)務(wù)系統(tǒng)中的系統(tǒng)數(shù)據(jù)像組織機(jī)構(gòu)、人員及權(quán)限數(shù) 據(jù)等,這些數(shù)據(jù)通常保存在關(guān)系數(shù)據(jù)庫系統(tǒng)中,一般情況下這些數(shù)據(jù)很長時(shí)間不會改變。只 要數(shù)據(jù)不改變,多次查詢相關(guān)信息得到的結(jié)果往往是相同的,一些操作比較消耗計(jì)算機(jī)資 源,重復(fù)相同的操作對性能影響很大,使用系統(tǒng)的人越多,應(yīng)用系統(tǒng)運(yùn)行越慢。在軟件設(shè)計(jì) 中緩存技術(shù)廣泛采用,但是目前的緩存技術(shù)適用于粗粒度數(shù)據(jù)的緩存,如上述組織機(jī)構(gòu)信 息,通常都是在系統(tǒng)啟動(dòng)時(shí)將所有數(shù)據(jù)一次性讀入緩存;但是對于一些細(xì)粒度數(shù)據(jù)像權(quán)限 數(shù)據(jù),每個(gè)用戶、每個(gè)角色、針對不同的操作對象,權(quán)限都不一樣,一些權(quán)限需要進(jìn)行復(fù)雜的 運(yùn)算才能得到,類似這樣的數(shù)據(jù)難以做到一次性將所有數(shù)據(jù)加載到緩存中。另外,目前的緩 存都是在函數(shù)調(diào)用端將函數(shù)執(zhí)行結(jié)果進(jìn)行緩存,為了增加緩存功能,需要對調(diào)用端代碼進(jìn) 行修改。在實(shí)現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題目前的緩存技 術(shù)不支持細(xì)粒度函數(shù)執(zhí)行結(jié)果的緩存,也不支持函數(shù)自管理緩存功能,如果函數(shù)調(diào)用方和 函數(shù)提供方是不同的組織,調(diào)用方往往不清楚函數(shù)提供方的業(yè)務(wù)邏輯,不能確認(rèn)被調(diào)用函 數(shù)的執(zhí)行結(jié)果能否被緩存及緩存的刷新時(shí)間,調(diào)用方往往不會采取緩存策略,因此影響了 其使用效果。
發(fā)明內(nèi)容
本發(fā)明旨在提供一種用于函數(shù)執(zhí)行的緩存方法和裝置,能夠解決現(xiàn)有技術(shù)中使用 的緩存技術(shù)不支持細(xì)粒度函數(shù)執(zhí)行結(jié)果的緩存及不支持函數(shù)自管理緩存功能,如果函數(shù)調(diào) 用方和函數(shù)提供方是不同的組織,調(diào)用方往往不清楚函數(shù)提供方的業(yè)務(wù)邏輯,不能確認(rèn)被 調(diào)用函數(shù)的執(zhí)行結(jié)果能否被緩存及緩存的刷新時(shí)間,進(jìn)而調(diào)用方往往不會采取緩存策略, 因此影響了其使用效果的問題。在本發(fā)明的實(shí)施例中,提供了一種用于函數(shù)執(zhí)行的緩存方法,包括以下步驟將參數(shù)列表傳入被調(diào)用函數(shù),并根據(jù)被調(diào)用函數(shù)的函數(shù)名和參數(shù)列表得到函數(shù)實(shí) 例特征碼;根據(jù)函數(shù)實(shí)例特征碼在緩存模塊中查詢函數(shù)執(zhí)行結(jié)果;若未檢索到函數(shù)執(zhí)行結(jié)果,執(zhí)行被調(diào)用函數(shù);
以函數(shù)實(shí)例特征碼為鍵值將被調(diào)用函數(shù)的執(zhí)行結(jié)果存入緩存模塊,并返回被調(diào)用 函數(shù)的執(zhí)行結(jié)果。在本發(fā)明的實(shí)施例中還提供了一種用于函數(shù)執(zhí)行的緩存裝置,包括調(diào)用模塊,用于向被調(diào)用函數(shù)發(fā)起調(diào)用請求,其中,被調(diào)用函數(shù)具有緩存功能且返 回值為有效數(shù)據(jù)類型;特征碼生成模塊,用于將參數(shù)列表傳入被調(diào)用函數(shù),并根據(jù)被調(diào)用函數(shù)的函數(shù)名 和參數(shù)列表得到函數(shù)實(shí)例特征碼;緩存模塊,用于緩存被調(diào)用函數(shù)的執(zhí)行結(jié)果;執(zhí)行模塊,用于根據(jù)函數(shù)實(shí)例特征碼在緩存模塊中查詢函數(shù)執(zhí)行結(jié)果,若未檢索 到函數(shù)執(zhí)行結(jié)果,執(zhí)行被調(diào)用函數(shù),以函數(shù)實(shí)例特征碼為鍵值將被調(diào)用函數(shù)的執(zhí)行結(jié)果存 入緩存模塊,并返回被調(diào)用函數(shù)的執(zhí)行結(jié)果。在上述實(shí)施例中,通過在函數(shù)優(yōu)化過程中,根據(jù)函數(shù)實(shí)例特征碼在緩存模塊中查 詢函數(shù)執(zhí)行結(jié)果,若未檢索到函數(shù)執(zhí)行結(jié)果,執(zhí)行被調(diào)用函數(shù),并以函數(shù)實(shí)例特征碼為鍵值 將被調(diào)用函數(shù)的執(zhí)行結(jié)果存入緩存模塊,并返回被調(diào)用函數(shù)的執(zhí)行結(jié)果,從而使調(diào)用方根 據(jù)函數(shù)的執(zhí)行結(jié)果而不需要執(zhí)行被調(diào)用函數(shù),當(dāng)緩存模塊中沒有查詢到函數(shù)的執(zhí)行結(jié)果時(shí) 才執(zhí)行被調(diào)用函數(shù),細(xì)化了函數(shù)執(zhí)行結(jié)果的緩存粒度,使得被調(diào)用函數(shù)不必重復(fù)的執(zhí)行,提 高了函數(shù)執(zhí)行的效率,克服了現(xiàn)有技術(shù)中使用的緩存技術(shù)不支持細(xì)粒度執(zhí)行結(jié)果的緩存及 函數(shù)自管理緩存功能,如果函數(shù)調(diào)用方和函數(shù)提供方是不同的組織,調(diào)用方往往不清楚函 數(shù)提供方的業(yè)務(wù)邏輯,不能確認(rèn)被調(diào)用函數(shù)的執(zhí)行結(jié)果能否被緩存及緩存的刷新時(shí)間,進(jìn) 而調(diào)用方往往不會采取緩存策略,因此影響了其使用效果的問題。
此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā) 明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中圖1示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于函數(shù)執(zhí)行的緩存方法流程圖;圖2示出了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的用于函數(shù)執(zhí)行的緩存方法流程圖;圖3示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于函數(shù)執(zhí)行的緩存裝置示意圖。
具體實(shí)施例方式下面將參考附圖并結(jié)合實(shí)施例,來詳細(xì)說明本發(fā)明。圖1示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于函數(shù)執(zhí)行的緩存方法流程圖,包括以 下步驟S102,將參數(shù)列表傳入被調(diào)用函數(shù),并根據(jù)被調(diào)用函數(shù)的函數(shù)名和參數(shù)列表得到 函數(shù)實(shí)例特征碼;S104,根據(jù)函數(shù)實(shí)例特征碼在緩存模塊中查詢函數(shù)執(zhí)行結(jié)果;S106,若未檢索到函數(shù)執(zhí)行結(jié)果,執(zhí)行被調(diào)用函數(shù);S108,以函數(shù)實(shí)例特征碼為鍵值將被調(diào)用函數(shù)的執(zhí)行結(jié)果存入緩存模塊,并返回 被調(diào)用函數(shù)的執(zhí)行結(jié)果。在本實(shí)施例中,通過在函數(shù)優(yōu)化過程中,根據(jù)函數(shù)實(shí)例特征碼在緩存模塊中查詢函數(shù)執(zhí)行結(jié)果,若未檢索到函數(shù)執(zhí)行結(jié)果,執(zhí)行被調(diào)用函數(shù),并以函數(shù)實(shí)例特征碼為鍵值將 被調(diào)用函數(shù)的執(zhí)行結(jié)果存入緩存模塊,并返回被調(diào)用函數(shù)的執(zhí)行結(jié)果,從而使調(diào)用方根據(jù) 函數(shù)的執(zhí)行結(jié)果而不需要執(zhí)行被調(diào)用函數(shù),當(dāng)緩存模塊中沒有查詢到函數(shù)的執(zhí)行結(jié)果時(shí)才 執(zhí)行被調(diào)用函數(shù),細(xì)化了函數(shù)執(zhí)行結(jié)果的緩存粒度,使得被調(diào)用函數(shù)不必重復(fù)的執(zhí)行,提高 了函數(shù)執(zhí)行的效率,克服了現(xiàn)有技術(shù)中使用的緩存技術(shù)不支持細(xì)粒度執(zhí)行結(jié)果的緩存及函 數(shù)自管理緩存功能,如果函數(shù)調(diào)用方和函數(shù)提供方是不同的組織,調(diào)用方往往不清楚函數(shù) 提供方的業(yè)務(wù)邏輯,不能確認(rèn)被調(diào)用函數(shù)的執(zhí)行結(jié)果能否被緩存及緩存的刷新時(shí)間,進(jìn)而 調(diào)用方往往不會采取緩存策略,因此影響了其使用效果的問題。優(yōu)選地,在上述用于函數(shù)執(zhí)行的緩存方法中,將參數(shù)列表傳入被調(diào)用函數(shù),并根據(jù) 被調(diào)用函數(shù)的函數(shù)名和參數(shù)列表得到函數(shù)實(shí)例特征碼具體包括將參數(shù)列表傳入被調(diào)用函 數(shù);將被調(diào)用函數(shù)的函數(shù)名及參數(shù)列表組合為函數(shù)實(shí)例字符串,并將函數(shù)實(shí)例字符串按照 設(shè)定的散列算法轉(zhuǎn)換為散列碼作為函數(shù)實(shí)例特征碼。優(yōu)選地,在上述用于函數(shù)執(zhí)行的緩存方法中,還包括以下步驟若檢索到函數(shù)執(zhí)行 結(jié)果,獲取緩存的函數(shù)執(zhí)行結(jié)果并返回。優(yōu)選地,在上述用于函數(shù)執(zhí)行的緩存方法中,被調(diào)用函數(shù)為面向過程開發(fā)語言的 函數(shù)或面向?qū)ο箝_發(fā)語言的對象成員函數(shù)。優(yōu)選地,在上述用于函數(shù)執(zhí)行的緩存方法中,參數(shù)列表包括以下至少一種基本數(shù) 據(jù)類型、數(shù)組、結(jié)構(gòu)或面向?qū)ο箝_發(fā)語言中的對象類型。優(yōu)選地,在上述用于函數(shù)執(zhí)行的緩存方法中,當(dāng)以函數(shù)實(shí)例特征碼為鍵值將被調(diào) 用函數(shù)的執(zhí)行結(jié)果存入緩存模塊時(shí),還包括以下步驟在緩存模塊中保存被調(diào)用函數(shù)的執(zhí) 行時(shí)間的時(shí)間戳。優(yōu)選地,在上述用于函數(shù)執(zhí)行的緩存方法中,還包括以下步驟根據(jù)時(shí)間戳判斷保 存在緩存中的調(diào)用函數(shù)的執(zhí)行結(jié)果是否超時(shí);如果超時(shí),重新執(zhí)行被調(diào)用函數(shù)。圖2示出了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的用于函數(shù)執(zhí)行的緩存方法流程圖。如 圖2所示,當(dāng)被調(diào)用函數(shù)為不帶參數(shù)的函數(shù)的緩存機(jī)制時(shí),調(diào)用函數(shù)的執(zhí)行過程如下所示函數(shù)調(diào)用裝置調(diào)用函數(shù)名為“function”的函數(shù),由于函數(shù)沒有參數(shù),因此函數(shù)描 述為 “function ()”。第一次調(diào)用過程如下S201,由于被調(diào)用函數(shù)沒有參數(shù),函數(shù)特征碼生成裝置將函數(shù)名“function” 作為函數(shù)實(shí)例字符串,通過散列函數(shù)將所述函數(shù)實(shí)例字符串轉(zhuǎn)換為函數(shù)實(shí)例特征碼 “1380938712”;S202,根據(jù)函數(shù)實(shí)例特征碼在預(yù)置的緩存裝置中查詢函數(shù)執(zhí)行結(jié)果;S203,判斷執(zhí)行結(jié)果是否存在,由于函數(shù)第一次被執(zhí)行,因此無法在緩存裝置中檢 索到執(zhí)行結(jié)果,轉(zhuǎn)入步驟S205;S205,按照函數(shù)正常的業(yè)務(wù)邏輯執(zhí)行函數(shù)體,進(jìn)行函數(shù)計(jì)算;S206,判斷計(jì)算結(jié)果是否出現(xiàn)異常,如果計(jì)算過程出現(xiàn)異常,則轉(zhuǎn)至步驟S209,否 則進(jìn)入步驟S207 ;S207,以函數(shù)實(shí)例特征碼為鍵值將函數(shù)執(zhí)行結(jié)果存入預(yù)置的緩存裝置;S208,將執(zhí)行結(jié)果返回給函數(shù)調(diào)用裝置;
S209,拋出異常。第二次及第二次以上調(diào)用函數(shù)的執(zhí)行過程如下所示S201,函數(shù)特征碼生成裝置將函數(shù)名“function”作為函數(shù)實(shí)例字符串,通過散列 函數(shù)將所述函數(shù)實(shí)例字符串轉(zhuǎn)換為函數(shù)實(shí)例特征碼“1380938712”;S202,根據(jù)所述函數(shù)實(shí)例特征碼在預(yù)置的緩存裝置中查詢函數(shù)執(zhí)行結(jié)果;S203,判斷執(zhí)行結(jié)果是否存在,由于函數(shù)已經(jīng)被執(zhí)行一次且執(zhí)行成功,因此可以在 緩存中檢索到第一次的執(zhí)行結(jié)果,轉(zhuǎn)入步驟S204 ;S204,判斷緩存的函數(shù)執(zhí)行結(jié)果是否已經(jīng)超時(shí),如果未超時(shí),進(jìn)入步驟S208 ;否則 執(zhí)行步驟S205 ;S205,按照函數(shù)正常的業(yè)務(wù)邏輯執(zhí)行函數(shù)體,進(jìn)行函數(shù)計(jì)算;S206,判斷計(jì)算結(jié)果是否出現(xiàn)異常,如果計(jì)算過程出現(xiàn)異常,則轉(zhuǎn)至步驟S209,否 則進(jìn)入步驟S207 ;S207,以函數(shù)實(shí)例特征碼為鍵值將函數(shù)執(zhí)行結(jié)果存入預(yù)置的緩存裝置;S208,將執(zhí)行結(jié)果返回給函數(shù)調(diào)用裝置;S209,拋出異常。如圖2所示,當(dāng)被調(diào)用參數(shù)為帶兩個(gè)參數(shù)的函數(shù)時(shí),調(diào)用函數(shù)的執(zhí)行過程如下所 示被調(diào)用函數(shù)為帶一個(gè)整型參數(shù)和一個(gè)字符串型參數(shù),函數(shù)描述為“fimctionGnt nParam, String strParam) ”,整型數(shù)據(jù)為 “ 100”,字符串型數(shù)據(jù)為 “hello,,;第一次調(diào)用函數(shù)的執(zhí)行過程S201,函數(shù)實(shí)例特征碼生成裝置將函數(shù)名“function”和函數(shù)的兩個(gè)參數(shù)合并為 “fimctionlOOhello”作為函數(shù)實(shí)例字符串,通過散列函數(shù)將所述函數(shù)實(shí)例字符串轉(zhuǎn)換為函 數(shù)實(shí)例特征碼“-1879014055” ;S202,根據(jù)所述函數(shù)實(shí)例特征碼在預(yù)置的緩存裝置中查詢函數(shù)執(zhí)行結(jié)果;S203,判斷執(zhí)行結(jié)果是否存在,由于函數(shù)第一次被執(zhí)行,因此無法在緩存裝置中檢 索到執(zhí)行結(jié)果,轉(zhuǎn)入步驟S205;S205,按照函數(shù)正常的業(yè)務(wù)邏輯執(zhí)行函數(shù)體,進(jìn)行函數(shù)計(jì)算;S206,判斷計(jì)算結(jié)果是否出現(xiàn)異常,如果計(jì)算過程出現(xiàn)異常,則轉(zhuǎn)至步驟S209,否 則進(jìn)入步驟S207 ;S207,以函數(shù)實(shí)例特征碼為鍵值將函數(shù)執(zhí)行結(jié)果存入預(yù)置的緩存裝置;S208,將執(zhí)行結(jié)果返回給函數(shù)調(diào)用裝置;S209,拋出異常。第二次及第二次以上調(diào)用函數(shù)的執(zhí)行過程如下所示S201,函數(shù)實(shí)例特征碼生成裝置將函數(shù)名“function”和函數(shù)的兩個(gè)參數(shù)合并為 “fimctionlOOhello”作為函數(shù)實(shí)例字符串,通過散列函數(shù)將所述函數(shù)實(shí)例字符串轉(zhuǎn)換為函 數(shù)實(shí)例特征碼“-1879014055” ;S202,根據(jù)所述函數(shù)實(shí)例特征碼在預(yù)置的緩存裝置中查詢函數(shù)執(zhí)行結(jié)果;S203,判斷執(zhí)行結(jié)果是否存在,由于函數(shù)已經(jīng)被執(zhí)行一次且執(zhí)行成功,因此可以在 緩存中檢索到第一次的執(zhí)行結(jié)果,轉(zhuǎn)入步驟S204 ;
S204,判斷緩存的函數(shù)執(zhí)行結(jié)果是否已經(jīng)超時(shí),如果未超時(shí),進(jìn)入步驟S208 ;否則 執(zhí)行步驟S205 ;S205,按照函數(shù)正常的業(yè)務(wù)邏輯執(zhí)行函數(shù)體,進(jìn)行函數(shù)計(jì)算;S206,判斷計(jì)算結(jié)果是否出現(xiàn)異常,如果計(jì)算過程出現(xiàn)異常,則轉(zhuǎn)至步驟S209,否 則進(jìn)入步驟S207 ;S207,以函數(shù)實(shí)例特征碼為鍵值將函數(shù)執(zhí)行結(jié)果存入預(yù)置的緩存裝置;S208,將執(zhí)行結(jié)果返回給函數(shù)調(diào)用裝置;S209,拋出異常。在本實(shí)施例中,在完成第一次函數(shù)執(zhí)行后,進(jìn)行第二次以上的函數(shù)調(diào)用如果緩存 執(zhí)行結(jié)果未超時(shí),就不會執(zhí)行圖2所示的步驟S205,而這部分往往是最消耗計(jì)算機(jī)資源的, 通過該緩存機(jī)制提高了函數(shù)執(zhí)行效率。圖3示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于函數(shù)執(zhí)行的緩存裝置示意圖,包括調(diào)用模塊301,用于向被調(diào)用函數(shù)發(fā)起調(diào)用請求,其中,被調(diào)用函數(shù)具有緩存功能 且返回值為有效數(shù)據(jù)類型;特征碼生成模塊302,用于將參數(shù)列表傳入被調(diào)用函數(shù),并根據(jù)被調(diào)用函數(shù)的函數(shù) 名和參數(shù)列表得到函數(shù)實(shí)例特征碼;緩存模塊303,用于緩存被調(diào)用函數(shù)的執(zhí)行結(jié)果;執(zhí)行模塊304,用于根據(jù)函數(shù)實(shí)例特征碼在緩存模塊中查詢函數(shù)執(zhí)行結(jié)果,若未檢 索到函數(shù)執(zhí)行結(jié)果,執(zhí)行被調(diào)用函數(shù),以函數(shù)實(shí)例特征碼為鍵值將被調(diào)用函數(shù)的執(zhí)行結(jié)果 存入緩存模塊,并返回被調(diào)用函數(shù)的執(zhí)行結(jié)果。在本實(shí)施例中,通過在函數(shù)優(yōu)化過程中,根據(jù)函數(shù)實(shí)例特征碼在緩存模塊中查詢 函數(shù)執(zhí)行結(jié)果,若未檢索到函數(shù)執(zhí)行結(jié)果,執(zhí)行被調(diào)用函數(shù),并以函數(shù)實(shí)例特征碼為鍵值將 被調(diào)用函數(shù)的執(zhí)行結(jié)果存入緩存模塊,并返回被調(diào)用函數(shù)的執(zhí)行結(jié)果,從而使調(diào)用方根據(jù) 函數(shù)的執(zhí)行結(jié)果而不需要執(zhí)行被調(diào)用函數(shù),當(dāng)緩存模塊中沒有查詢到函數(shù)的執(zhí)行結(jié)果時(shí)才 執(zhí)行被調(diào)用函數(shù),細(xì)粒度執(zhí)行結(jié)果的緩存及使得被調(diào)用函數(shù)不必重復(fù)的執(zhí)行,提高了函數(shù) 執(zhí)行的效率,克服了現(xiàn)有技術(shù)中使用的緩存技術(shù)不支持細(xì)粒度執(zhí)行結(jié)果的緩存及不支持函 數(shù)自管理緩存功能,如果函數(shù)調(diào)用方和函數(shù)提供方是不同的組織,調(diào)用方往往不清楚函數(shù) 提供方的業(yè)務(wù)邏輯,不能確認(rèn)被調(diào)用函數(shù)的執(zhí)行結(jié)果能否被緩存及緩存的刷新時(shí)間,進(jìn)而 調(diào)用方往往不會采取緩存策略,因此影響了其使用效果的問題。優(yōu)選地,在上述用于函數(shù)執(zhí)行的緩存裝置中,特征碼生成模塊具體包括傳入單 元,用于將參數(shù)列表傳入被調(diào)用函數(shù);特征碼單元,用于將被調(diào)用函數(shù)的函數(shù)名及參數(shù)列表 組合為函數(shù)實(shí)例字符串,并將函數(shù)實(shí)例字符串按照設(shè)定的散列算法轉(zhuǎn)換為散列碼作為函數(shù) 實(shí)例特征碼。優(yōu)選地,在上述用于函數(shù)執(zhí)行的緩存裝置中,執(zhí)行模塊包括判斷單元,用于根據(jù) 緩存模塊中保存的被調(diào)用函數(shù)的執(zhí)行結(jié)果的時(shí)間戳判斷保存在緩存中的調(diào)用函數(shù)的執(zhí)行 結(jié)果是否超時(shí)。從以上的描述中,可以看出,本發(fā)明的上述實(shí)施例實(shí)現(xiàn)了如下技術(shù)效果通過對函數(shù)本身增加緩存功能,而不必對調(diào)用端程序進(jìn)行任何修改,提高了業(yè)務(wù) 模塊的獨(dú)立性、原子性。同時(shí)實(shí)現(xiàn)了企業(yè)應(yīng)用系統(tǒng)的細(xì)粒度數(shù)據(jù)的緩存,可以大幅度提高系統(tǒng)的運(yùn)行性能,使得業(yè)務(wù)系統(tǒng)使用的人越多,被緩存的數(shù)據(jù)就越多,系統(tǒng)運(yùn)行得越快;提供了函數(shù)自管理緩存功能,只需在函數(shù)開始處,即原函數(shù)體之前增加是否需要 緩存的程序邏輯;在函數(shù)結(jié)束前,即原函數(shù)體之后增加將執(zhí)行結(jié)果放入緩存的代碼即可使 函數(shù)本身具備緩存功能;函數(shù)調(diào)用端代碼不用作任何改動(dòng)即可使應(yīng)用系統(tǒng)具備緩存功能。 并且可以實(shí)現(xiàn)細(xì)粒度系統(tǒng)數(shù)據(jù)的緩存,以函數(shù)名和函數(shù)參數(shù)值為基礎(chǔ)進(jìn)行緩存,做到了細(xì) 粒度數(shù)據(jù)的緩存,避免了現(xiàn)有技術(shù)只能對粗粒度數(shù)據(jù)進(jìn)行緩存的弊端;不同于現(xiàn)有緩存技術(shù)一次性將所有系統(tǒng)數(shù)據(jù)加載到緩存中占用計(jì)算機(jī)內(nèi)存資源 的落后方法,本發(fā)明的實(shí)施例中函數(shù)在未被執(zhí)行時(shí)不會緩存任何數(shù)據(jù),在被執(zhí)行時(shí)才將滿 足參數(shù)要求的執(zhí)行結(jié)果緩存在計(jì)算機(jī)內(nèi)存中。顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用 的計(jì)算裝置來實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成 的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來實(shí)現(xiàn),從而,可以將它們存儲 在存儲裝置中由計(jì)算裝置來執(zhí)行,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們 中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的 硬件和軟件結(jié)合。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技 術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修 改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種用于函數(shù)執(zhí)行的緩存方法,其特征在于,包括以下步驟將參數(shù)列表傳入被調(diào)用函數(shù),并根據(jù)所述被調(diào)用函數(shù)的函數(shù)名和所述參數(shù)列表得到函 數(shù)實(shí)例特征碼;根據(jù)所述函數(shù)實(shí)例特征碼在緩存模塊中查詢函數(shù)執(zhí)行結(jié)果; 若未檢索到所述函數(shù)執(zhí)行結(jié)果,執(zhí)行所述被調(diào)用函數(shù); 以所述函數(shù)實(shí)例特征碼為鍵值將所述被調(diào)用函數(shù)的執(zhí)行 結(jié)果存入所述緩存模塊,并返回所述被調(diào)用函數(shù)的執(zhí)行結(jié)果。
2.根據(jù)權(quán)利要求1所述的緩存方法,其特征在于,將參數(shù)列表傳入被調(diào)用函數(shù),并根據(jù) 所述被調(diào)用函數(shù)的函數(shù)名和所述參數(shù)列表得到函數(shù)實(shí)例特征碼具體包括將參數(shù)列表傳入被調(diào)用函數(shù);將所述被調(diào)用函數(shù)的函數(shù)名及所述參數(shù)列表組合為函數(shù)實(shí)例字符串,并將所述函數(shù)實(shí) 例字符串按照設(shè)定的散列算法轉(zhuǎn)換為散列碼作為函數(shù)實(shí)例特征碼。
3.根據(jù)權(quán)利要求1所述的緩存方法,其特征在于,還包括以下步驟 若檢索到所述函數(shù)執(zhí)行結(jié)果,獲取緩存的所述函數(shù)執(zhí)行結(jié)果并返回。
4.根據(jù)權(quán)利要求1所述的緩存方法,其特征在于,所述被調(diào)用函數(shù)為面向過程開發(fā)語 言的函數(shù)或面向?qū)ο箝_發(fā)語言的對象成員函數(shù)。
5.根據(jù)權(quán)利要求1所述的緩存方法,其特征在于,所述參數(shù)列表包括以下至少一種 基本數(shù)據(jù)類型、數(shù)組、結(jié)構(gòu)或面向?qū)ο箝_發(fā)語言中的對象類型。
6.根據(jù)權(quán)利要求1所述的緩存方法,其特征在于,當(dāng)以所述函數(shù)實(shí)例特征碼為鍵值將 所述被調(diào)用函數(shù)的執(zhí)行結(jié)果存入所述緩存模塊時(shí),還包括以下步驟在所述緩存模塊中保存所述函數(shù)實(shí)例執(zhí)行時(shí)間的時(shí)間戳。
7.根據(jù)權(quán)利要求6所述的緩存方法,其特征在于,還包括以下步驟根據(jù)所述時(shí)間戳判斷保存在緩存中的所述調(diào)用函數(shù)的執(zhí)行結(jié)果是否超時(shí); 如果超時(shí),重新執(zhí)行所述被調(diào)用函數(shù)。
8.一種用于函數(shù)執(zhí)行的緩存裝置,其特征在于,包括調(diào)用模塊,用于向被調(diào)用函數(shù)發(fā)起調(diào)用請求,其中,所述被調(diào)用函數(shù)具有緩存功能且返 回值為有效數(shù)據(jù)類型;特征碼生成模塊,用于將參數(shù)列表傳入所述被調(diào)用函數(shù),并根據(jù)所述被調(diào)用函數(shù)的函 數(shù)名和所述參數(shù)列表得到函數(shù)實(shí)例特征碼;緩存模塊,用于緩存所述被調(diào)用函數(shù)的執(zhí)行結(jié)果;執(zhí)行模塊,用于根據(jù)所述函數(shù)實(shí)例特征碼在所述緩存模塊中查詢函數(shù)執(zhí)行結(jié)果,若未 檢索到所述函數(shù)執(zhí)行結(jié)果,執(zhí)行所述被調(diào)用函數(shù),以所述函數(shù)實(shí)例特征碼為鍵值將所述被 調(diào)用函數(shù)的執(zhí)行結(jié)果存入所述緩存模塊,并返回所述被調(diào)用函數(shù)的執(zhí)行結(jié)果。
9.根據(jù)權(quán)利要求8所述的緩存裝置,其特征在于,所述特征碼生成模塊具體包括 傳入單元,用于將參數(shù)列表傳入被調(diào)用函數(shù);特征碼單元,用于將所述被調(diào)用函數(shù)的函數(shù)名及所述參數(shù)列表組合為函數(shù)實(shí)例字符 串,并將所述函數(shù)實(shí)例字符串按照設(shè)定的散列算法轉(zhuǎn)換為散列碼作為函數(shù)實(shí)例特征碼。
10.根據(jù)權(quán)利要求8所述的緩存裝置,其特征在于,所述執(zhí)行模塊包括判斷單元,用于根據(jù)所述緩存模塊中保存的所述調(diào)用函數(shù)的執(zhí)行結(jié)果的時(shí)間戳判斷保存在緩存中的所述調(diào)用函數(shù)的執(zhí)行結(jié)果是否超時(shí)。
全文摘要
本發(fā)明公開了一種用于函數(shù)執(zhí)行的緩存方法和裝置,其中,方法包括以下步驟將參數(shù)列表傳入被調(diào)用函數(shù),并根據(jù)被調(diào)用函數(shù)的函數(shù)名和參數(shù)列表得到函數(shù)實(shí)例特征碼;根據(jù)函數(shù)實(shí)例特征碼在緩存模塊中查詢函數(shù)執(zhí)行結(jié)果;若未檢索到函數(shù)執(zhí)行結(jié)果,執(zhí)行被調(diào)用函數(shù);以函數(shù)實(shí)例特征碼為鍵值將被調(diào)用函數(shù)的執(zhí)行結(jié)果存入緩存模塊,并返回被調(diào)用函數(shù)的執(zhí)行結(jié)果。
文檔編號G06F9/46GK102087613SQ20091024142
公開日2011年6月8日 申請日期2009年12月8日 優(yōu)先權(quán)日2009年12月8日
發(fā)明者樂以長, 傅連舟, 陸振華 申請人:北京大學(xué), 北京方正奧德計(jì)算機(jī)系統(tǒng)有限公司, 北大方正集團(tuán)有限公司