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

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