一種數(shù)據(jù)緩存的系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉電力行業(yè)報(bào)表統(tǒng)計(jì)技術(shù)領(lǐng)域,具體涉及一種報(bào)表數(shù)據(jù)緩存的系統(tǒng)及方法。
【背景技術(shù)】
[0002]報(bào)表統(tǒng)計(jì)系統(tǒng)中通常存在一些計(jì)算較為復(fù)雜且用戶請(qǐng)求頻繁的數(shù)據(jù),傳統(tǒng)系統(tǒng)會(huì)把這些數(shù)據(jù)保存在硬盤中,每次直接從數(shù)據(jù)庫中查詢數(shù)據(jù)、計(jì)算數(shù)據(jù),這不僅增加數(shù)據(jù)庫服務(wù)器的壓力,也極大的影響了取數(shù)的速度從而降低了數(shù)據(jù)展示的效率。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是為了解決上述問題,提供了一種數(shù)據(jù)緩存的方法,該方法先將其數(shù)據(jù)集查詢的結(jié)果緩存下來,對(duì)于緩存下來的數(shù)據(jù),再次使用到相同數(shù)據(jù)集時(shí),無需再次連接數(shù)據(jù)庫重新查詢數(shù)據(jù),直接使用緩存下來的結(jié)果實(shí)現(xiàn)數(shù)據(jù)集共享機(jī)制,達(dá)到資源復(fù)用,減少取數(shù)時(shí)間從而提高了數(shù)據(jù)的展現(xiàn)速度。
[0004]為實(shí)現(xiàn)上述目的,本發(fā)明采用下述技術(shù)方案:
[0005]一種數(shù)據(jù)緩存的系統(tǒng),包括:
[0006]數(shù)據(jù)緩存區(qū),包括共用緩存區(qū)和特定緩存區(qū);
[0007]數(shù)據(jù)模板定制組件,用于將數(shù)據(jù)緩存區(qū)的數(shù)據(jù)集與報(bào)表、圖形數(shù)據(jù)模版的唯一標(biāo)識(shí)碼——對(duì)應(yīng);
[0008]數(shù)據(jù)集管理組件,用于管理數(shù)據(jù)模板與數(shù)據(jù)集,根據(jù)客戶端請(qǐng)求的報(bào)表、圖形數(shù)據(jù),通過所述標(biāo)識(shí)碼在數(shù)據(jù)緩存區(qū)中查找相應(yīng)的數(shù)據(jù)集;
[0009]緩存管理組件,用于控制數(shù)據(jù)緩存區(qū)的大小和生命周期,通過設(shè)置最大緩存、最長生存時(shí)間以及最長空閑時(shí)間對(duì)報(bào)表的生命周期進(jìn)行控制。
[0010]所述共用緩存區(qū)用于存儲(chǔ)用戶常用或者共用的報(bào)表、圖形數(shù)據(jù);
[0011]所述特定緩存區(qū)用于存儲(chǔ)通過輸入查詢參數(shù)能夠查詢得到的數(shù)據(jù)。
[0012]所述特定緩存區(qū)數(shù)據(jù)的查詢參數(shù)與數(shù)據(jù)集具有一一對(duì)應(yīng)的序列號(hào)。
[0013]所述特定緩存區(qū)設(shè)置有生命周期。
[0014]所述最大緩存是指共用緩存區(qū)的最大內(nèi)存值;
[0015]所述最長生存時(shí)間是指緩存數(shù)據(jù)集在共用緩存區(qū)中存活的最大時(shí)間;
[0016]所述最長空閑時(shí)間是指緩存數(shù)據(jù)集在共用緩存區(qū)中停留不被使用不能超過的時(shí)間。
[0017]—種數(shù)據(jù)緩存系統(tǒng)的實(shí)現(xiàn)方法,包括以下步驟:
[0018](1)設(shè)置數(shù)據(jù)緩存區(qū),所述數(shù)據(jù)緩存區(qū)包括:數(shù)據(jù)共用緩存區(qū)和特定緩存區(qū);
[0019](2)將報(bào)表、圖形所對(duì)應(yīng)的數(shù)據(jù)集分別存入共用緩存區(qū)和特定緩存區(qū),將緩存的數(shù)據(jù)集與報(bào)表、圖形數(shù)據(jù)模版定制時(shí)候的唯一標(biāo)識(shí)碼一一對(duì)應(yīng);
[0020](3)接收客戶端的報(bào)表、圖形數(shù)據(jù)請(qǐng)求,判斷請(qǐng)求的報(bào)表、圖形數(shù)據(jù)模板是否設(shè)置了緩存,如果是,轉(zhuǎn)入下一步;否則,到數(shù)據(jù)庫中提取數(shù)據(jù)集;
[0021](4)在數(shù)據(jù)緩存區(qū)查找與報(bào)表、圖形數(shù)據(jù)模板相對(duì)應(yīng)的緩存數(shù)據(jù)集,如果找到了所述緩存數(shù)據(jù)集,則轉(zhuǎn)入下一步;否則,到數(shù)據(jù)庫中提取數(shù)據(jù)集;同時(shí),將在數(shù)據(jù)庫中提取到的數(shù)據(jù)集與報(bào)表、圖形數(shù)據(jù)模板的標(biāo)識(shí)碼相對(duì)應(yīng)后保存到數(shù)據(jù)緩存區(qū);
[0022](5)根據(jù)報(bào)表、圖形數(shù)據(jù)模板的標(biāo)識(shí)碼在數(shù)據(jù)緩存區(qū)中匹配相應(yīng)的數(shù)據(jù)集。
[0023]所述步驟(2)中,為特定緩存區(qū)中數(shù)據(jù)集中的各數(shù)據(jù)參數(shù)設(shè)置唯一序列號(hào),所述序列號(hào)與數(shù)據(jù)參數(shù)對(duì)應(yīng)的數(shù)據(jù)集一一對(duì)應(yīng);
[0024]客戶端輸入請(qǐng)求數(shù)據(jù)參數(shù)時(shí),根據(jù)請(qǐng)求數(shù)據(jù)參數(shù)對(duì)應(yīng)的序列號(hào),到特定緩存區(qū)中查找該序列號(hào)對(duì)應(yīng)的數(shù)據(jù)集。
[0025]通過設(shè)置最大緩存、最長生存時(shí)間以及最長空閑時(shí)間對(duì)數(shù)據(jù)緩存區(qū)的報(bào)表、圖形數(shù)據(jù)的生命周期進(jìn)行控制;
[0026]如果緩存數(shù)據(jù)集超過最大緩存值,則服務(wù)器會(huì)根據(jù)緩存策略清除緩存區(qū)中的部分?jǐn)?shù)據(jù)集;
[0027]如果緩存數(shù)據(jù)集超出最長生存時(shí)間,則此緩存數(shù)據(jù)集將會(huì)失效,被移除數(shù)據(jù)緩存區(qū);
[0028]如果緩存數(shù)據(jù)集的空閑時(shí)間超出最長空閑時(shí)間,則此緩存數(shù)據(jù)集將會(huì)被移除數(shù)據(jù)緩存區(qū)。
[0029]本發(fā)明的有益效果是:
[0030]1.減少數(shù)據(jù)讀取和計(jì)算的時(shí)間從而提高了報(bào)表、圖形的展現(xiàn)速度。
[0031]2.減少應(yīng)用服務(wù)與數(shù)據(jù)庫服務(wù)之間的數(shù)據(jù)請(qǐng)求次數(shù),減少數(shù)據(jù)計(jì)算的次數(shù),從而減小服務(wù)器負(fù)擔(dān)。
【附圖說明】
[0032]圖1為本發(fā)明數(shù)據(jù)緩存系統(tǒng)結(jié)構(gòu)示意圖;
[0033]圖2為本發(fā)明數(shù)據(jù)緩存方法流程圖。
【具體實(shí)施方式】
:
[0034]下面結(jié)合附圖與實(shí)例對(duì)本發(fā)明做進(jìn)一步說明:
[0035]一種數(shù)據(jù)緩存的系統(tǒng),包括:
[0036]數(shù)據(jù)緩存區(qū),包括共用緩存區(qū)和特定緩存區(qū);
[0037]數(shù)據(jù)模板定制組件,用于將數(shù)據(jù)緩存區(qū)的數(shù)據(jù)集與報(bào)表、圖形數(shù)據(jù)模版的唯一標(biāo)識(shí)碼——對(duì)應(yīng);
[0038]數(shù)據(jù)集管理組件,用于管理數(shù)據(jù)模板與數(shù)據(jù)集,根據(jù)客戶端請(qǐng)求的報(bào)表、圖形數(shù)據(jù),通過所述標(biāo)識(shí)碼在數(shù)據(jù)緩存區(qū)中查找相應(yīng)的數(shù)據(jù)集;
[0039]緩存管理組件,用于控制數(shù)據(jù)緩存區(qū)的大小和生命周期,通過設(shè)置最大緩存、最長生存時(shí)間以及最長空閑時(shí)間對(duì)報(bào)表的生命周期進(jìn)行控制。
[0040]共用緩存區(qū)用于存儲(chǔ)用戶常用或者共用的報(bào)表、圖形數(shù)據(jù);共用緩存區(qū)就是所有分配了權(quán)限的用戶一登陸系統(tǒng)就會(huì)使用的到數(shù)據(jù),該緩存區(qū)數(shù)據(jù)特點(diǎn)是使用頻率高、緩存數(shù)據(jù)固定重用率高,比如今日的報(bào)表數(shù)據(jù)、昨天的報(bào)表數(shù)據(jù),所有用戶登陸后看到的都是一樣的;
[0041]特定緩存區(qū)用于存儲(chǔ)通過輸入查詢參數(shù)能夠查詢得到的數(shù)據(jù),該緩存區(qū)數(shù)據(jù)特點(diǎn)是使用頻率相對(duì)不高、緩存數(shù)據(jù)重用率相對(duì)低;
[0042]本發(fā)明中涉及的數(shù)據(jù)使用頻率的高低、緩存數(shù)據(jù)重用率的高低均根據(jù)用戶的實(shí)際需要確定。
[0043]平臺(tái)對(duì)所有用戶常用和共用的報(bào)表、圖形等數(shù)據(jù),通過模板定制時(shí)候的唯一標(biāo)識(shí)提供一定大小的共用緩存區(qū),用戶的每次請(qǐng)求通過唯一標(biāo)識(shí)可直接到緩存區(qū)中獲取數(shù)據(jù),而不需要再到數(shù)據(jù)庫中查詢和計(jì)算;
[0044]對(duì)于不同用戶可能因?yàn)椴煌膮?shù)進(jìn)行查詢的數(shù)據(jù)提供特定緩沖區(qū),比如:一個(gè)以統(tǒng)計(jì)日期作為查詢參數(shù)的報(bào)表,最常用的參數(shù)是當(dāng)天或者前一天,可能某個(gè)用戶查詢上一周某天的數(shù)據(jù),而另外一個(gè)用戶查詢上個(gè)月某天的數(shù)據(jù);
[0045]對(duì)請(qǐng)求參數(shù)使用散列碼hashcode進(jìn)行編碼,生成唯一序列號(hào);將該請(qǐng)求參數(shù)的序列號(hào)與特定緩存區(qū)中對(duì)應(yīng)的數(shù)據(jù)集一一對(duì)應(yīng)。
[0046]當(dāng)其他用戶訪問同一報(bào)表、圖形數(shù)據(jù)時(shí)候,先通過參數(shù)生成序列號(hào),再到緩沖區(qū)中尋找該序列號(hào)對(duì)應(yīng)的數(shù)據(jù),如果找到則直接返回?cái)?shù)據(jù),如果未找到則通過報(bào)表定義的數(shù)據(jù)集及參數(shù)到數(shù)據(jù)庫中獲取數(shù)據(jù),對(duì)于特定的緩沖區(qū)有生命周期限制。
[0047]1.數(shù)據(jù)模板定制組件,主要用來將數(shù)據(jù)集與業(yè)務(wù)報(bào)表、圖形數(shù)據(jù)模板一一對(duì)應(yīng);
[0048]數(shù)據(jù)模板類似EXCEL的宏定義,可以用來指定每一個(gè)單元格的數(shù)據(jù)是來自數(shù)據(jù)庫的哪張表,哪條記錄,