Redis 十六 Lua指令碼

2021-09-11 16:16:46 字數 611 閱讀 7134

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

比如在分布式鎖小節,我們提到了 del_if_equals 偽指令,它可以將匹配 key 和刪除 key 合併在一起原子性執行,redis 原生沒有提供這樣功能的指令,它可以使用 lua 指令碼來完成。

script load 和 evalsha 指令

在上面的例子中,指令碼的內容很短。如果指令碼的內容很長,而且客戶端需要頻繁執行,那麼每次都需要傳遞冗長的指令碼內容勢必比較浪費網路流量。所以 redis 還提供了 script load 和 evalsha 指令來解決這個問題。

script load 指令用於將客戶端提供的 lua 指令碼傳遞到伺服器而不執行,但是會得到指令碼的唯一 id,這個唯一 id 是用來唯一標識伺服器快取的這段 lua 指令碼,它是由 redis 使用 sha1 演算法揉捏指令碼內容而得到的乙個很長的字串。有了這個唯一 id,後面客戶端就可以通過 evalsha 指令反覆執行這個指令碼了。

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指令碼

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