配置潤(rùn)乾報(bào)表的緩存
<wbr></wbr>
<wbr></wbr>
任務(wù)背景
不管報(bào)表引擎的算法如何優(yōu)化,報(bào)表數(shù)據(jù)量大到一定程度,用戶并發(fā)數(shù)多到一定程度,服務(wù)器的性能總會(huì)告急,因此,報(bào)表引擎的任務(wù)一方面是優(yōu)化算法,另一方面也是更重要的,是要提供有效的緩存機(jī)制與并發(fā)控制機(jī)制。
<wbr></wbr>
面臨困難
報(bào)表的緩存,乍一聽(tīng)似乎挺簡(jiǎn)單的,不就是把算好的報(bào)表存下來(lái),然后再次訪問(wèn)時(shí)不用再次計(jì)算了,直接從緩存里讀取嗎?實(shí)際做起來(lái)需要考慮的細(xì)節(jié)很多,并不那么容易。
首先,要考慮參數(shù)和宏。大部分報(bào)表都是有參數(shù)或者宏的,不同的參數(shù)和宏,會(huì)算出不同的結(jié)果報(bào)表,因此,報(bào)表的緩存不僅僅和報(bào)表模板關(guān)聯(lián),還和參數(shù)、宏有關(guān)系,只有參數(shù)和宏完全相同的時(shí)候,才能從緩存里讀取。
其次是緩存時(shí)間的問(wèn)題,如果某個(gè)緩存的報(bào)表不斷地被訪問(wèn),那么用戶訪問(wèn)到的始終是舊報(bào)表,無(wú)法更新,因此報(bào)表緩存的時(shí)候還需要記錄緩存的時(shí)間,而用戶訪問(wèn)的時(shí)候可以請(qǐng)求多長(zhǎng)時(shí)間內(nèi)緩存的報(bào)表,從而保證一定的新鮮度。
接著,還需要考慮報(bào)表模板的更新問(wèn)題,一旦報(bào)表模板更新了,就要觸發(fā)該報(bào)表的緩存清除,從而保證用戶訪問(wèn)到的是新的報(bào)表。而這種緩存的清除,不能影響到別的報(bào)表。
最麻煩的要數(shù)集群的情況了,目前的集群有兩種,一種是session和服務(wù)器綁定,一旦登陸了就始終訪問(wèn)同一臺(tái)服務(wù)器;另一種是session復(fù)制的機(jī)制,session不和服務(wù)器綁定,可能一會(huì)訪問(wèn)這臺(tái)服務(wù)器,一會(huì)訪問(wèn)另一臺(tái)服務(wù)器,這種情況用戶參數(shù)還必須跟著session走。
集群的時(shí)候,在A服務(wù)器上緩存的報(bào)表,在B服務(wù)器上是找不到的,此時(shí)只能在服務(wù)器之間進(jìn)行通訊,互相查找、讀取緩存的報(bào)表。
<wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr> 小小的緩存問(wèn)題,卻引發(fā)了如此多的麻煩事,不過(guò)不用煩惱,潤(rùn)乾報(bào)表4.0新推出的緩存機(jī)制,很好地解決了上述問(wèn)題。實(shí)現(xiàn)步驟非常簡(jiǎn)單:</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
實(shí)現(xiàn)步驟
1、<wbr> 在reportConfig.xml文件中,把a(bǔ)lwaysReloadDefine屬性設(shè)為no</wbr>
2、<wbr> 在調(diào)用報(bào)表的jsp中,把 <report:html 標(biāo)簽的useCache屬性設(shè)為yes,同時(shí)設(shè)上timeout屬性,即調(diào)用多少分鐘內(nèi)緩存的報(bào)表。</wbr>
<wbr></wbr>
<wbr></wbr>
效果演示
<wbr></wbr>
圖1、沒(méi)有使用緩存,每一次訪問(wèn),都會(huì)與數(shù)據(jù)庫(kù)交互一次
<wbr></wbr>
圖2、啟動(dòng)緩存機(jī)制,再次訪問(wèn)時(shí)不再計(jì)算,而是直接生成HTML
<wbr></wbr>
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
