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 每個時間片的時長,可以是按秒 分 時。...