Redis 數據庫(五)—— Redis 事務和事務鎖

一、Redis 事務

1.1 Redis 事務概述

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

Redis 事務可以一次執行多個命令, 並且帶有以下三個重要的保證:

  • 批量操作在發送 EXEC 命令前被放入隊列緩存。
  • 收到 EXEC 命令後進入事務執行,事務中任意命令執行失敗,其餘的命令依然被執行。
  • 在事務執行過程,其他客戶端提交的命令請求不會插入到事務執行命令序列中。

1.1.2 Redis 事務階段
一個事務從開始到執行會經歷以下三個階段:

  • 開始事務。
  • 命令入隊。
  • 執行事務。

1.2 Redis 事務操作指令

1.2.1 基本指令
(1)開啓事務

multi

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

(2)執行事務

exec

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

(3)取消事務

discard

取消(終止)當前事務,發生再multi之後,exec之前

示例
在這裏插入圖片描述

1.2.2 事務操作注意事項
已經執行完畢的命令對應的數據不會自動回滾。

1.3 Redis 事務鎖

對key添加監視鎖,在執行exec前如果key發生了變化,終止事務執行

watch key1 [key2..]

取消對所有key的監視

unwatch

使用setnx設置-一個公共鎖

setnx lock-key value

利用setnx命令的返回值特徵,有值則返回設置失敗,無值則返回設置成功

  • 對於返回設置成功的,擁有控制權,進行下一步的具體業務操作
  • 對於返回設置失敗的,不具有控制權,排隊或等待

使用expire爲鎖key添加時間限定,到時不釋放,放棄鎖

expire lock-key second
pexpire lock-key milliseconds

由於操作通常都是微秒或亳秒級,因此該鎖定時間不宜設置過大。具體時間需要業務測試後確認。

  • 例如:持有鎖的操作最長執行時間127ms,最短執行時間7ms。
  • 測試百萬次最長執行時間對應命令的最大耗時,測試百萬次網絡延遲平均耗時。
  • 鎖時間設定推薦:最大耗時*120%+平均網絡延遲* 110%
  • 如果業務最大耗時 << 網絡平均延遲,通常爲2個數量級,取其中單個耗時較長即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章