Redis分布式鎖 樂觀鎖的實現

2021-10-07 07:08:30 字數 819 閱讀 5347

樂觀鎖

大多數是基於資料版本(version)的記錄機制實現的。即為資料增加乙個版本標識,在基於資料庫表的版本解決方案中,一般是通過為資料庫表增加乙個」version」欄位來實現讀取出資料時,將此版本號一同讀出,之後更新時,對此版本號加1。此時,將提交資料的版本號與資料庫表對應記錄的當前版本號進行比對,如果提交的資料版本號大於資料庫當前版本號,則予以更新,否則認為是過期資料。redis中可以使用watch命令會監視給定的key,當exec時候如果監視的key從呼叫watch後發生過變化,則整個事務會失敗。也可以呼叫watch多次監視多個key。這樣就可以對指定的key加樂觀鎖了。注意watch的key是對整個連線有效的,事務也一樣。如果連線斷開,監視和事務都會被自動清除。當然了exec,discard,unwatch命令都會清除連線中的所有監視。

redis事務

redis中的事務(transaction)是一組命令的集合。事務同命令一樣都是redis最小的執行單位,乙個事務中的命令要麼都執行,要麼都不執行。redis事務的實現需要用到 multi 和 exec 兩個命令,事務開始的時候先向redis伺服器傳送 multi 命令,然後依次傳送需要在本次事務中處理的命令,最後再傳送 exec 命令表示事務命令結束。redis的事務是下面4個命令來實現

1.multi,開啟redis的事務,置客戶端為事務態。

2.exec,提交事務,執行從multi到此命令前的命令佇列,置客戶端為非事務態。

3.discard,取消事務,置客戶端為非事務態。

4.watch,監視鍵值對,作用時如果事務提交exec時發現監視的監視對發生變化,事務將被取消。

redis分布式鎖 樂觀鎖實現

基於參考文章自己敲了一遍,基本一樣。利用springboot搭建環境,基於redis實現樂觀鎖秒殺 配置檔案 redis spring.redis.host 127.0.0.1 spring.redis.port 6379 spring.redis.timeout 10000配置類 componen...

樂觀鎖實現分布式鎖

就是說特別樂觀,比如說每次去吃飯的時候,都認為視窗沒有人,只有到了吃飯的視窗才看有沒有人,如果有人則去別的地方吃飯。就像系統認為資料的更新在大多數情況下是不會產生衝突的,只在資料庫更新操作的提交的時候才對資料作衝突檢測。如果檢測的結果出現了與預期資料不一致的情況,則返回失敗的資訊。樂觀鎖在大多數是基...

分布式鎖 使用Redis實現分布式鎖

關於分布式鎖的實現,我的前一篇文章講解了如何使用zookeeper實現分布式鎖。關於分布式鎖的背景此處不再做贅述,我們直接討論下如何使用redis實現分布式鎖。關於redis,筆主不打算做長篇大論的介紹,只介紹下redis優秀的特性。支援豐富的資料型別,如string list map set zs...