SpringBoot執行Lua指令碼

2021-10-16 03:22:51 字數 1852 閱讀 8471

lua 是一種輕量小巧的指令碼語言,用標準c語言編寫並以源**形式開放, 其設計目的是為了嵌入應用程式中,從而為應用程式提供靈活的擴充套件和定製功能。

defaultredisscript

rs =

newdefaultredisscript

<

>

("return 'hello redis' "

, string.

class);

//指定傳遞引數序列化方式

redisserializer argsserializer = redistemplate.

getdefaultserializer()

;//指定返回結果序列化方式

redisserializer

resultserializer = redistemplate.

getstringserializer()

;//執行lua指令碼

string res =

(string) redistemplate.

execute

(rs, argsserializer, resultserializer, null)

;

//注意指令碼中kys[l]和kys[2] 的寫法,它們代表客戶端傳遞的第乙個鍵和第二個鍵,

//而ar**[l]和ar**[2]則表示客戶端傳遞的第乙個和第二個引數

string lua =

"redis.call ('set', keys[1], ar**[1]) \n"

+"redis.call ('set', keys[2], ar**[2]) \n "

+" local str1 = redis.call ('get', keys [1]) \n "

+" local str2 = redis.call ('get', keys [2]) \n "

+" if str1 == str2 then \n "

+" return 1 \n "

+" end \n "

+" return 0 \n "

;

lua中keysar**值從redistemplate.execute傳遞listkeys, object... args引數中獲得。

上面指令碼需要兩個keys和兩個ar**:

redistemplate.

execute

(rs, argsserializer, resultserializer, arrays.

aslist

(kys[l]

, kys[2]

), ar**[1]

, ar**[1]

)

有小夥伴有呼叫時候沒有指定序列化方式直接:

redistemplate.

execute

(rs, arrays.

aslist

(kys[l]

, kys[2]

), ar**[1]

, ar**[1]

)

com.fasterxml.jackson.core.jsonparseexception: unrecognized token 『hello』: was expecting (json string, number, array, object or token 『null』, 『true』 or 『false』)

因為redis中不是直接儲存string,是陣列形式,——redis原理

它無法直接序列化,所以得指定序列化方式。

SpringBoot執行流程

通過上面這個簡要示意圖,可以看出,只要將事件通知的擴充套件點忽略,springboot的執行流程並不是想象中那麼複雜。public void started void environmentprepared configurableenvironment environment public int...

Spring Boot 啟動執行

public static void main string args return run new class args spring boot主程式main方法只做了兩件事 this null,primarysources resourceloader null this.resourceloa...

lua執行系統命令

lua中,系統庫函式有 os functions os.clock,os.date,os.difftime,os.execute,os.exit,os.getenv,os.remove,os.rename,os.setlocale,os.time,os.tmpname os.execute可以執行d...