1. 概述
抽数缓存插件 安装后,若想为模板开启「全局缓存」和「联动缓存」,可在「模板缓存管理处」进行设置。如下图所示:
2. 功能介绍
全局缓存,缓存的是查询结果,但有时用户数据集里的参数是会变化的,结果有很多,这时候全局缓存的作用就不明显了,此时建议使用联动缓存。
2.1 全局缓存
可将常用的数据集或者 sql 函数抽取到内存进行缓存,之后预览相关模板时,就能明显提高查询的速度。
如果对于数据的实时性要求不高,能接受半小时左右的更新频率,那么使用缓存是一种既能降低服务器和数据库压力,又能提升报表执行速度的方案。
2.2 联动缓存
2.2.1 功能描述
可将模板中用于联动的数据集和 sql 函数去参缓存,有利于加速模板中参数联动的性能。
「联动缓存」基于「全局缓存」进行了场景的扩充,支持了填报场景下例如控件数据字典联动,控件值联动等场景,加快了控件操作时的取数速度,优化了交互体验。
2.2.2 缓存对象
数据集:控件数据字典(参数面板控件、单元格控件、表单控件)使用的带有参数的 sql 语句。
sql 函数:单元格值、条件属性、形态、校验、提交中使用的带有参数的 sql 函数。
2.2.3 注意事项
1)「联动缓存」是「全局缓存」的一部分,其通用设置功能一致。
2)仅支持 MySQL、SQLServer、Oracle 数据库。
3)不支持部分 sql 语句结构。具体可见下表:
不支持场景 | 示例 |
---|---|
参数不在 where 最外层,比如在子查询中 | SELECT * FROM S产品 where 产品ID in (SELECT 产品ID FROM S产品明细 where 产品名称="${mc}") |
参数在数据库公式内 | SELECT * FROM S产品 where 产品ID = fanruan("${id}") |
参数在 group by 或者 order by 语句中 | SELECT * FROM S产品 order by "${id}" |
存在 if 函数,且结果分支大于 1(空分支不算) | SELECT * FROM S产品 where 1=1 ${if(len(id) == 0,"and 产品ID=1","and 产品ID = '" + id + "'")} |
where 条件中包含字段与操作符相同的条件 | SELECT * FROM S产品 where 产品ID >1 and 产品ID >2 |
存在 sum 等计算函数 | SELECT sum(单价) FROM S产品 where 产品ID < 5 |
2.3 全局缓存、联动缓存区别
1)缓存初始化时机不一样:「全局缓存」是在设置开启全局缓存,模板加载的时候进行初始化;「联动缓存」是在开启模板联动缓存时,后台就按照顺序开始抽取。
2)缓存范围不一样:全局缓存是将一个模板的所有 sql 全部缓存;联动缓存只将一个模板中用于联动的 sql 进行缓存。
3)缓存 sql 不一样:全局缓存是将完整的 sql 进行缓存;联动缓存是将简单 sql 去参后进行缓存。
4)读取缓存后的计算逻辑不一样:全局缓存是直接读取缓存结果用于模板计算;联动缓存读取缓存后还需要拼接上 sql 中的参数进行过滤后,再用于模板计算。
3. 操作步骤
3.1 缓存模板推荐
首次安装「抽数缓存」插件并使用时,建议使用「缓存模板管理」功能进行检测适合开启缓存的模板。
点击「开始分析」后,插件将根据系统的历史运行数据进行分析,并推荐可能适合使用缓存的模板。如下图所示:
3.2 缓存模板管理
1)用户可在此处添加、取消开启缓存的模板。如下图所示:
注:支持同时开启「全局缓存」和「联动缓存」。
2)用户如果对缓存的使用状况有了解诉求,或想手动处理部分异常缓存时,可参见:缓存运行监控