1. 概述
1.1 版本
报表服务器版本 | JAR 包版本 | 插件版本 |
---|---|---|
10.0 | 2019-03-29 | V7.1 |
1.2 应用场景
Redis 缓存数据库作为最为的流行的缓存数据库之一,经常被使用在各种需要高速访问的场景下,偶尔也需要把缓存中的数据取出来做一些简单的查看和分析。但是 Redis 作为 NoSQL数据库,在 FineReport 中没有办法直接使用 JDBC 或者 JNDI 连接访问。
1.3 功能描述
Redis 插件使设计器连接 Redis 数据库并取数,且支持哈希表、列表、集合以及有序集合。
2. 插件介绍
3. 示例
3.1 新建 Redis 数据连接
1)点击服务器>定义数据连接,如下图所示:
2)选择 Redis 并输入数据库地址、端口号和密码,如下图所示:
3)配置 Redis 连接的连接池信息,如下图所示:
4)如果当前报表服务器无法直接连接 Redis 服务器,而是需要通过跳板机器连接 Redis 服务器,则需要配置跳板服务器,如下图所示:
注意:一旦配置了跳板服务器,连接池配置即失效,只能使用单个连接。
3.2 Redis 数据集
3.2.1 新建 Redis 数据集
点击+,选择 Redis 数据集,如下图所示:
3.2.2 编写 Redis 查询语句
1)根据参数 $key ,查询 redis 中的值,相当于调用命令:get name ,如下图所示:
注意:左侧的列表是用于展示搜索出来的 key 值的,方便编写 SQL 语句的时候使用列出来的 key 值。
3.2.3 预览效果
查询预览结果如下图所示:
3.2.4 支持的命令
操作符 | 示例代码 | 说明 |
---|---|---|
get | get hellokey | 获取 hellokey 对应的值 |
mget | mget foo bar zyx | 获取参数列表汇总所有的键对应的值 |
hkeys | hkeys website | 获取指定哈希表中的所有键 |
hget | hget site redis | |
hmget | hmget pet dog cat | 返回哈希表key中,一个或多个给定域的值,可参考 http://redisdoc.com/hash/hmget.html |
hgetall | hgetall contry | 获取哈希表中所有的键值对 |
lrange | lrange score 0 -1 | 获取列表中指定位置的值 |
smembers | smembers name | 获取无序列表中参数值对应的所有元素 |
zrange | zrange |
3.3 Redis 程序数据集
Redis 程序数据集,是使用支持 ES6 的 JavaScript 脚本语句,来从 Redis 查询数据并进行数据转换的数据集,该数据使用非常灵活,但需要有一定的 JavaScript 脚本知识。
注1:该类型的数据集需要使用 2019-03-10 之后的 JAR 包。
注2:可以在数据集中选择使用的引擎类型,V8 为高速引擎,支持 ES6 语法,但低版本 Linux 服务器可能不支持,默认为 JRE 自带的引擎,效率较低但兼容性好。
注3:如果服务器不支持 V8 引擎,会降级为使用 JDK 内置的 Nashon 引擎,只能使用 ES5 语法。
注4:可以使用脚本语句 return merge([[console.engine()]], ["engine"]); 查看当前服务器使用的脚本引擎。
3.3.1 新建 Redis 程序数据集
3.3.2 编写 Redis 查询脚本
注意:脚本语句基于JavaScript,在使用前需要掌握一定的JavaScript基础,提供一个自学JS语言的网站仅供参考:JS学习
1)输入对应的脚本,进行数据集查询,如下图所示:
2)得到预览结果如下图所示:
3)同时也可以在脚本中传递参数,如下图中的 ${key} ,表示 key 是从报表中传递的参数,如下图所示:
注意:查询脚本中使用的参数名字,和报表参数的名字不能相同,例如这里的key和name,是两个不同的名字。
3.3.3 内置函数和变量
名称 | 作用 | 类型 | 注意事项 |
---|---|---|---|
redis | 表示 redis 客户端 | 变量 | |
redis.get | 等同于命令 get | 函数 | |
redis.hget | 等同于命令 hget | 函数 | |
redis.hkeys | 等同于命令 hkeys | 函数 | |
redis.hmget | 等同于命令 hmget | 函数 | |
redis.hgetAll | 等同于命令 hgetall | 函数 | 注意是驼峰式的方法名字,不是全小写 |
redis.keys | 等同于命令 keys | 函数 | |
redis.lrange | 等同于命令 lrange | 函数 | |
redis.mget | 等同于命令 mget | 函数 | |
redis.smembers | 等同于命令 smembers | 函数 | |
unique(array) | 将数组进行去重,主要用于列名处理 | 函数 | |
console.log(info) | 输出调试信息,会在日志文件中输出 INFO 级别的信息 | 函数 | |
console.error(err) | 输出错误级别的信息,会在日志文件中输出 ERROR 级别的信息 | 函数 | |
console.engine | 输出使用的脚本引擎 | 函数 | V8或者Nashorn |
merge(table, column) | 合并数据集的内容和列名对象,用于给数据集返回正确的数据结构 | 函数 | 第一个参数必须是一个二维数组,第二个参数必须是一个一维数组 |
注意:所有 Redis 函数均返回的是字符串,如果需要转换成数组或者对象,可以使用 JSON.parse() 函数将字符串转换为 JavaScript 对象。
3.3.4 执行外部脚本
在 Redis 程序数据集中,可以使用 Files.require(filePath) 来引入外部脚本文件,示例如下:
// 相对路径,读取的是 下的文件
// Files.require("");表示读取 C 盘下的文件
Files.require("");
return merge(content, column);
其中 query.js 文件的位置为:报表工作目录/resources/script/query.js。
使用相对路径的时候会读取报表工作目录下的文件,使用绝对路径时,会直接读取该文件。