redis與lua指令碼的結合使用

2021-08-09 22:00:36 字數 1766 閱讀 2521

上篇介紹了lua的指令碼的基本資料型別,以及函式定義,字串常規方法,表,執行緒等等,

今天為大家介紹redis如何結合lua指令碼使用

我今天,先做簡單的介紹,就不帶大家安裝了,直接在專案中操作.

首先看來看乙個加單的hell word !!!

jedis jedis=new jedis("127.0.0.1",6379);

object eval = jedis.eval("return redis.call('set','first','hell word !!!')");

object eval1 = jedis.eval("return redis.call('get','first')");

system.out.println(eval.tostring());

system.out.println(eval1.tostring());

執行結果為:

ok

hell word !!!

刪除redis中的值

jedis jedis=new jedis("127.0.0.1",6379);

object eval = jedis.eval("return redis.call('del','first')");

system.out.print(eval.tostring());

執行結果為:

1

但是官方給的解釋說這麼寫實不規範的寫法,官方建議這樣:

jedis jedis=new jedis("127.0.0.1",6379);

object eval = jedis.eval("return redis.call('del',keys[1])",1,"first");

system.out.print(eval.tostring());

也就是說 通過傳慘的形式.所以大家要注意語法的書寫

keys[1] 只的就是key ,1指的是key有幾個,first指的是引數

獲取redis中的hash值

jedis jedis=new jedis("127.0.0.1",6379);

string eva=

"local myresult = redis.call('hkeys',keys[1]); " +

"local result={}; "+

"for i,v in ipairs(myresult) do " +

" local hva = redis.call('hget',keys[1],v);"+

" table.insert(result,1,hva);"+

" end " +

" return result ;";

object eval1 = jedis.eval(eva,1,"map");

system.out.println(eval1.tostring());

執行結果:

[剛, gang]

這是簡單的幾個連線redis的指令碼的書寫,大家也可以在linux上安裝lua執行庫,然後通過命令在執行lua指令碼.

但是個人覺得,如果在專案中使用,還是建議直接書寫lua指令碼語句,而不是直接寫lua指令碼檔案去載入檔案

redis呼叫lua指令碼

在redis中很多基本操作都是原子操作 但是缺少事務的概念,所幸的是redis支援lua指令碼,可以利用lua指令碼實現事務特性 執行比 較對應key值大小,更新較大值 的lua指令碼 param key param time return public object updatehigherint...

Redis使用lua指令碼

版本 自2.6.0起可用。時間複雜度 取決於執行的指令碼。使用lua指令碼的好處 命令格式 eval script numkeys key key arg arg 說明 簡單例項 127.0.0.1 6379 eval return ar 1 0 100 100 127.0.0.1 6379 eva...

Redis 十六 Lua指令碼

redis 提供了非常豐富的指令集,但是使用者依然不滿足,希望可以自定義擴充若干指令來完成一些特定領域的問題。redis 為這樣的使用者場景提供了 lua 指令碼支援,使用者可以向伺服器傳送 lua 指令碼來執行自定義動作,獲取指令碼的響應資料。redis 伺服器會單執行緒原子性執行 lua 指令碼...