1. 概述
1.1 版本
報表伺服器版本 | 插件版本 |
---|---|
11.0 | 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引擎/Nashon 引擎
V8 為高速引擎,支援 ES6 文法,但低版本伺服器可能不支援。預設為自帶的引擎,效率較低但相容性好。
注3:支援的引擎類型與Redis伺服器有關,部分伺服器版本不支援V8 引擎,可使用語句查看當前伺服器使用的腳本引擎:
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) 來引入外部腳本檔案,範例如下:
其中 query.js 檔案的位置為:報表工作區間/resources/script/query.js。
使用相對路徑的時候會讀取報表工作區間下的檔案,使用絕對路徑時,會直接讀取該檔案。