【Redis高級】redis事務

1、Redis事務的定義
redis事務就是一個命令執行的隊列,將一系列預定義命令包裝成一個整體(一個隊列)。當執行時,一次性按照添加順序依次執行,中間不會被打斷或者干擾

2、事務的基本操作

  • 開啓事務
multi
  • 作用
    作設定事務的開啓位置,此指令執行後,後續的所有指令均加入到事務中

  • 取消事務
discard

作用
終止當前事務的定義,發生在multi之後,exec之前


  • 執行事務
exec

作用
設定事務的結束位置,同時執行事務。與multi成對出現,成對使用


3、事務操作的基本流程
在這裏插入圖片描述
4、事務操作的注意事項

(1)定義事務的過程中,命令格式輸入錯誤怎麼辦?

  • 語法錯誤
    指命令書寫格式有誤 例如執行了一條不存在的指令
  • 處理結果
    如果定義的事務中所包含的命令存在語法錯誤,整體事務中所有命令均不會執行。包括那些語法正確的命令。

(2)定義事務的過程中,命令執行出現錯誤怎麼辦?

  • 運行錯誤
    指命令格式正確,但是無法正確的執行。例如對list進行incr操作
  • 處理結果
    能夠正確運行的命令會執行,運行錯誤的命令不會被執行

(3)注意:已經執行完畢的命令對應的數據不會自動回滾,需要程序員自己在代碼中實現回滾。

5、基於特定條件的事務執行

  • 對 key 添加監視鎖,在執行exec前如果key發生了變化,終止事務執行
watch key1, key2....
  • 取消對所有key的監視
unwatch

分佈式鎖

  • 使用 setnx 設置一個公共鎖
//上鎖
setnx lock-key value
//釋放鎖
del lock-key
  • 利用setnx命令的返回值特徵,有值(被上鎖了)則返回設置失敗,無值(沒被上鎖)則返回設置成功
  • 操作完畢通過del操作釋放鎖

分佈式鎖加強

  • 使用 expire 爲鎖key添加時間限定,到時不釋放,放棄鎖
expire lock-key seconds
pexpire lock-key milliseconds
  • 由於操作通常都是微秒或毫秒級,因此該鎖定時間不宜設置過大。具體時間需要業務測試後確認。

1)例如:持有鎖的操作最長執行時間127ms,最短執行時間7ms。
2)測試百萬次最長執行時間對應命令的最大耗時,測試百萬次網絡延遲平均耗時
3)鎖時間設定推薦:最大耗時120%+平均網絡延遲110%
4)如果業務最大耗時<<網絡平均延遲,通常爲2個數量級,取其中單個耗時較長即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章