redis事務及鎖應用
redis支援簡單的事務
redis與mysql事務的對比
redis
mysql
開啟multi
start transaction
語句普通命令
普通sql
失敗discard取消
rollback回滾
成功exec
commit
注:rollback與discard的區別
如果已經成功執行了2條語句,第3條語句出錯
rollback後,前2條的語句影響消失。
discard只是結束本次事務,前2條語句造成的影響仍然還在
注:multi後面的語句都會放入乙個佇列中,exec後再執行;
在multi後面的語句中,語句出現錯誤可能有2種情況
1、語法有問題:
這種情況下exec時,所有的語句都得不到執行
2、語法本身沒錯,但是適用物件有問題,比如sadd操作link物件,
exec之後,會執行正確的語句,並且跳過有不適當的語句
(如果sadd操作link這種事應該怎麼避免?這一點只能由程式設計師負責)
思考:我正在買票
ticket-1,money-100
而票只有1張,如果在我multi之後和exec之前,票被別人買了---- 即ticket=0
我該如何觀察這種情況,並不在提交
悲觀的想法:
世界充滿危險,肯定有人和我搶,給ticket上鎖,只有我能操作。(悲觀鎖)
樂觀的想法:
沒有那麼多的人和我搶,因此,我只需要注意---沒有人更改ticket的值就可以了(樂觀鎖)
redis的事務中,啟用的就是樂觀鎖,只負責檢測可key有沒有被修改。
作用:監聽key1 key2..... keyn有沒有發生變化,如果有變,則事務取消(任意乙個發生變化,事務都取消)
unwatch
作用:取消所有watch監聽
redis事務及鎖應用 發布訂閱模式
mysql和ridis事務對比 redis事務時執行命令放到了佇列裡。注 rollback與discard的區別 如果已經成功執行了2條語句,第三條語句出錯 rollback後前2條語句影響消失。discard只是結束本次事務,前2句造成的影響還在。注 在multi後面的語句中,語句出錯可能有2中情...
Redis事務 事務鎖
一旦成功所有的成功,乙個失敗,所有一些列連續動作都失敗 事務的基本操作 注意 加入事務的命令暫時到任務佇列中,並沒有立即執行,只有執行exec命令才開始執行事務定義過程中發現問題,怎麼辦?discard 事務的工作流程 事務的注意事項 手動進行事務回滾 業務場景1 業務分析 基於特定條件的事務執行 ...
Redis事務和鎖的應用詳解
無論是大小專案還是各種系統,相信事務是不容忽視的,下面,我們對redis的事務展開討論。如果你比較熟悉mysql的事務,redis的事務那就很簡單了。我們對redis的事務和mysql的事務進行下比較就能更清楚的了解到redis的事務機制了。通過比較,我們可以清楚的看到redis的事務命令,先看一段...