数据坞中的dataset通过scope属性设置为session或application时,数据坞可以通过ServletContext和HttpSession提供对象缓存机制,这样便于该对象在第二次被请求时不必重新创建,直接从缓存中取出即可。从而大大提高系统的响应速度。
但是Module对缓存对象还是具有一定的管理机制:
Timeout:dataset的timeout属性,用以表明如果该对象被缓存之后,当Module的缓存管理器执行例行检查的时候只要发现某个缓存的dataset在timeout指定的时间内未被使用,就立即从缓存中清除该对象,timeout设置为0表示使用后立即过期,使用效果与scope为request一样;
Module的例行检查基本配置由setting.xml文件的sweepInterval设定,单位为毫秒:
<property name="module.dataset.cache.sweepInterval" value="30000"/> |
系统每隔30秒执行一次dataset的缓存清理工作。
另外如果未设定dataset的timeout属性,系统默认使用如下的setting.xml中的配置决定:
<property name="module.dataset.cache.defaultTimeout" value="120000"/> |
Dataset的默认timeout为120秒。
为了保证系统的性能,避免在缓存中加入太多的dataset对象。可以通过如下的属性配置设定dataset的最大缓存数目:
<property name="module.dataset.cache.maxCount" value="5000"/> |
默认最大可以缓存5000个dataset对象。
数据坞中缓存的dataset的主键由以下信息生成
对象 |
说明 |
name |
数据坞的名称 |
id |
Dataset的id |
pageIndex |
Dataset的pageIndex |
pageSize |
Dataset的pageSize |
parameters |
Dataset的parameters集合 |
也就是说同一个dataset如果每一次请求时,其pageIndex, pageSize或parameters()发生变化的时候,对于数据坞的缓存处理机制中的主键计算方式来说就是一个不同的主键。则数据坞就会创建一个新的dataset对象并缓存起来。
因此设定dataset的scope为session或application的时候,就需要注意,如果dataset中的pageIndex,pageSize,parameters()等信息在每一次使用的时候都会发生变化,则系统默认提供的缓存处理机制就失去了意义。因此开发的时候就要注意设置session或application的是否能体现价值。