redis 事務和lua 指令碼的比較

2021-10-01 02:28:43 字數 549 閱讀 5813

redis 事務與lua指令碼

一.原理

1.redis事務

2.lua指令碼

3.兩者異同

相同點不同點

二.問題

1.使用場景是什麼

秒殺限流

2.如何選擇

一.原理

1.redis事務

基本原理為樂觀鎖,多個client對操作的key進行watch,一旦有乙個client進行了exec,那麼其它client的exec就會失效。其實現原理可參考 redis watch機制的分析。

2.lua指令碼

基本原理為使指令碼相當於乙個redis命令,可以結合redis原有命令,自定義指令碼邏輯。

3.兩者異同

相同點很好的實現了一致性、隔離性和永續性,但沒有實現原子性,無論是redis事務,還是lua指令碼,如果執行期間出現執行錯誤,之前的執行過的命令是不會回滾的。

不同點(1)redis事務是基於樂觀鎖,lua指令碼是基於redis的單執行緒執行命令。

(2)redis事務的執行原理就是一次命令的批量執行,而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 指令碼...