REDIS LUA指令碼使用經驗分享

2021-09-01 18:53:40 字數 877 閱讀 2907

redis lua指令碼出現之前redis是沒有伺服器端運算能力的,主要是用來儲存,用做快取用,運算是在客戶端進行,這樣帶來了很大的頻寬流量。lua出現之後這一問題得到了充分的解決,非常棒!

redis lua指令碼api介紹

eval 在redis伺服器端執行lur指令碼

evalsha 在redis 以指令碼的sha1簽名值在伺服器端執行lua 指令碼

script exists 判斷指令碼是否存在

script flush 釋放lur指令碼的快取

script load 以sha1簽名值做為key儲存指令碼

script kill 殺死當前執行的肢本

參考位址

eval 的引數為 eval script numkeys key [key ...] arg [arg ...]

[b]redis 推薦使用引數格式呼叫lur指令碼 為什麼呢?[/b]

evalsha以key取代實際的指令碼執行的,之所以用key是為了減少頻寬流量,sha1一般要比實際的指令碼短得多,如果指令碼帶著實參會在伺服器端生成n份指令碼,因為引數不同而指令碼也會不同。所以才推薦使用引數化格式,

script load 引數為script 也就是說我們獲取sha1的方法是在redis 伺服器的,[b]那麼我們每次呼叫evalsha的時侯不都是要呼叫一次該方法?[/b]那麼就得不償失了

為了方便管理和維護,我一般將指令碼以如下格式儲存成lua檔案

檔名自定義即可

第一行:sha1:(指令碼的sha1簽名)如果沒有執行過則第一行為空

第二行:指令碼內容

當我們執行指令碼時先開啟該lua檔案解發布第一行sha1值,如果存在則直接呼叫evalsha 方法,如果不存在則呼叫load方法並將sha1值儲存至lua檔案。再呼叫evalsha方法即可。

Redis Lua指令碼編寫快速指南

您應該在系統上安裝redis才能執行本文中的例子。閱讀本文時對照redis命令參考可能會更有幫助。簡而言之 效能提公升。您在redis中執行的大多數任務都涉及許多步驟。您可以使用lua在redis內部進行操作,而不必使用應用程式語言來執行這些步驟。例如,我使用lua指令碼改變儲存在redis的jso...

Redis Lua指令碼實現復合操作原子化

redis是高效能的key value資料庫,在很大程度克服了memcached這類key value儲存的不足,在部分場景下,是對關聯式資料庫的良好補充。得益於超高效能和豐富的資料結構,redis已成為當前架構設計中的首選key value儲存系統。雖然redis官網上提供了200多個命令,但做程...

居於redis lua指令碼實現的滑動視窗

我們常常使用滑動視窗實現限流操作,在單機時我們經常放在記憶體中實現,而在做全域性介面限流時,我們除了可以通過查詢介面呼叫記錄外,還可以通過依賴redis實現的滑動視窗進行,比如限制1分鐘可呼叫1000次,一小時可呼叫10000次。1 乙個固定長度的迴圈佇列 2 每個時間片的時長,可以是按秒 分 時。...