何為事務:
redis事務就是乙個命令執行的佇列,將一些命令包裝為乙個整體,在執行時,一次性全部依次執行,中間不會被打斷。
注意事項:
若multi開啟事務後,後續指令存在語法錯誤,則指令佇列被銷毀。事務停止。
事務的基本操作:
1、multi (開啟事務)何為監控鎖:2、exec (執行事務)
3、discard (取消事務,銷毀事務佇列中的所有指令)
為解決多執行緒運算元據導致的衝突引入的操作。對指定的key實現監控,若key在事務中發生了變化,則後續的exec會執行失敗。
監視鎖的基本操作:
1、watch key1 key2 (監控key。在multi前加鎖,若在事務執行前,監視的key值發生變化,則事務會執行失敗)分布式鎖的基本操作:2、unwatch (取消監控鎖)
1、setnx key value應用:(建立分布式鎖。運用string中的setnx特性,若key不存在可set成功,若key存在會set失敗的特性,來模擬鎖互斥鎖。)
2、del key (刪除分布式鎖)
3、expire lock-key second (為鎖新增時效,超過second秒未解鎖時自動解鎖)
4、pexpire lock-key mlliseconds (為鎖新增時效,超過mlliseconds毫秒未解鎖時自動解鎖)
redis分布式鎖的實質只是提供了乙個語法,setnx,設定乙個key的值,如果key不存在就設定成功,key已存在就設定失敗。在實際應用中想實現鎖的效果還需要新增額外**,流程如下:
1、迴圈設定key為num-lock的變數為1,直至設定成功時指令返回true(1)
while(setnx num-lock 1 == 0)
2、在多個客戶端同時設定時,僅會有乙個客戶端設定成功其它客戶端則卡在迴圈中
3、設定成功進行相關操作
4、del num-lock,刪除鎖該客戶端操作結束
5、此時num-lock變數被刪除,下乙個在迴圈中的客戶端將拿到鎖進入到業務操作中
問題:
在這種應用場景下就會有乙個問題,當其中乙個客戶端在設定num-lock鎖後如果宕機了,那從此刻起其它的客戶端將永遠無法獲取到鎖,因為num-lock變數已存在且未刪除。
針對客戶端setnx鎖後宕機導致死鎖的問題,針對此問題,可以對鎖加乙個新增乙個時效性來解決該問題。
expire、pexpire指令 :
為鎖lock-key設定生存時間(秒),到時不釋放則自動刪除expire lock-key second
設定生存時間(豪秒),到時不釋放則自動刪除
pexpire lock-key milliseconds鎖lock-key
redis 事務和鎖
redis與 mysql事務的對比 在mutil後面的語句中,語句出錯可能有2種情況 redis 鎖 redis流水線 效能測試 set time limit 0 ini set memory limit 1024m redis new redis g 1 redis connect 127.0.0...
redis事務和鎖
redis事務就是乙個命令執行的佇列,將一系列預定義命令包裝成乙個整體 乙個佇列 當執行時,一次性按照新增順序依次執行,中間不會被打斷或者干擾。事務的基本操作 開啟事務 multi 作用 設定事務的開啟位置,此指令執行後,後續的所有指令均加入到事務中 執行事務 exec 作用 設定事務的結束位置,同...
Redis事務 事務鎖
一旦成功所有的成功,乙個失敗,所有一些列連續動作都失敗 事務的基本操作 注意 加入事務的命令暫時到任務佇列中,並沒有立即執行,只有執行exec命令才開始執行事務定義過程中發現問題,怎麼辦?discard 事務的工作流程 事務的注意事項 手動進行事務回滾 業務場景1 業務分析 基於特定條件的事務執行 ...