多用户间共享缓存

当用户A访问报表A时,引擎会把计算结果缓存下来,当用户B(也可能是用户A再次访问)以同一参数再次访问时,引擎直接把缓存报表返回,而不必重新计算。

 

功能背景:

用户间共享缓存的目的,是为了避免不同用户访问同一张报表时重复运算的问题。因此可以把A用户访问报表时计算出的结果报表保存下来,当B用户也访问这个报表时,直接把保存下来的结果报表返回给B用户,不再重新计算。

 

对于带有参数的报表,当用户采用相同的参数进行重复访问时,也可以利用缓存,减少重复的计算。但是如果参数不一样,报表就只能重新计算,因为不同参数运算出来的结果报表不一样,无法利用缓存。因此,对于有参数的报表,缓存时还必须识别参数的值。

 

控制方式:

用户间共享缓存包括三个层面,模板共享、结果报表共享、分页后报表共享,我们可以通过两种方式对其进行控制。

参数控制

参数控制主要是用来控制模板共享的。若要实现多用户之间共享模板,可以通过配置raqsoftConfig.xml文件中alwaysReloadDefine参数来实现。设置alwaysReloadDefinevalueyes时,模板不可以被共享;设置alwaysReloadDefinevalueno时,可以实现模板之间的共享。

标签控制

标签控制主要是用来控制结果报表共享和分页后报表共享的。一般是通过tag标签中的useCachetimeout属性来设置的。

当且仅当raqsoftConfig.xml里的alwayReloadDefine属性设置为no时,tag标签中的useCachetimeout属性才会起作用,useCache属性控制是否启用缓存,而timeout为取多少长时间内生成的报表。

 

使用方法:

参数控制

相关配置在raqsoftConfig.xml中,其中时间以分钟为单位,可配置的属性如下所示:

<!-- 是否每次重新装载报表模板 -->

<property name="alwaysReloadDefine" value="no" />

<!-- 配置缓存报表目录 -->

<property name="cachedReportDir" value=" c:\runqian\cached" />

<!-- 配置报表最大未访问时长,以分钟为单位 -->

<property name="cachedReportTimeout" value="120" />

<!-- 配置参数最大未访问时长,以分钟为单位 -->

<property name="cachedParamsTimeout" value="120" />

 

说明:

1、  alwaysReloadDefine这个参数如果被关闭(即设置为yes),那么每次新任务请求都直接装载模板重新计算报表,不会读取缓存

2、  1的情况下,新读取的模板和新计算的报表照样会被缓存,其目的是为了实现2.1中的功能

3、  因此在1的情况下,意味着缓存中的对象会无限庞大,直到缓存对象过期才会被清除。所以,如果不是特殊需要,一般建议不要关闭alwaysReloadDefine

4、  如果必须关闭alwaysReloadDefine,那么建议缓存时间设置短一点,例如半小时,一般用户浏览一个报表半小时内还不翻页打印导出的话,多半也不会再次操作了。这样可以让缓存对象清除得及时点,避免缓存过于庞大。

 

标签控制

首先先将raqsoftConfig.xml里的alwayReloadDefine属性设置为no时,然后在发布报表的页面中tag中使用useCache timeout属性。

<report:html name="report1"

reportFileName="api/wangge.raq"     

useCache="yes"  //是否使用缓存

timeout="30"  //从缓存系统中取多少分钟内产生的报表,如果没有此时间内的,则产生一个新报表,该属性的单位为分钟

/>

上述属性的设置表示在如果A用户读取了报表wangge.raq,那么在30分钟内,如果B用户去读取wangge.raq报表时,系统不再计算该报表,只是从缓存中读取该报表,并返回给B用户,同时将缓存中wangge.raq的缓存时间修改为B用户读取的时间。