Redis官方給出兩種思路
第一種:SET key value [EX seconds] [PX milliseconds] NX
第二種:SETNX+GETSET
首先,分別看一下這幾個命令
SET命令
![](/d/20211018/ef5e791eb6ab21976a0d7053ddbb2e95.gif)
![](/d/20211018/9824cbf84d11bd6452997d0c5002d197.gif)
SETNX命令
![](/d/20211018/5fd7fb600b3bfe180e66f84b912afd88.gif)
![](/d/20211018/53f3c785581a4a676a8b313958f0cb76.gif)
GETSET命令
![](/d/20211018/9bbc60cf7810bd3dfd66ac5801762afa.gif)
![](/d/20211018/47423371e4a42bc2c0f28d550e5934dd.gif)
接著,看第一種方式
官方給出的思路是這樣的
![](/d/20211018/f008decc15b87263c1d5c183af5f6201.gif)
還有一處,也是類似的
![](/d/20211018/32b5c6c3a6de8d872c88610bf312f6ff.gif)
這種方式的實現(xiàn)可能是這樣的:
![](/d/20211018/3b97867371246861988d7cb3b7e55bad.gif)
![](/d/20211018/6e2bd2b8435445303aa13a68b8879159.gif)
第二種方式
官方給出的思路是這樣的
![](/d/20211018/43c87ba6ca6893412e76af414bea8b49.gif)
代碼可能看起來像是這樣
![](/d/20211018/02795c95db6c75aae3234781bdf9362f.gif)
總結:
這兩種方式的基本思路都是:客戶端在服務器上設置一個key值,如果能夠設置成功,則視為加鎖成功;刪除key,則表示解鎖。
不同之處在于,SET方式只需判斷能不能設置成功,刪除的時候判斷是不是自己設置的,萬一超時了利用系統(tǒng)自帶的生存時間可以自動釋放鎖。
而SETNX+GETSET方式除了需要判斷能不能設置成功,在設置失敗的時候還要進一步判斷其值是否有效,是否超時由客戶端自己判斷
![](/d/20211018/f59ffeec25cadeecee1b245fb5b67b5a.gif)
參考 https://redis.io/topics/distlock
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- PHP+redis實現(xiàn)的悲觀鎖機制示例
- Java使用Redisson分布式鎖實現(xiàn)原理
- Redis Template實現(xiàn)分布式鎖的實例代碼
- 如何利用Redis鎖解決高并發(fā)問題詳解
- Python實現(xiàn)的redis分布式鎖功能示例
- PHP實現(xiàn)Redis單據(jù)鎖以及防止并發(fā)重復寫入
- java基于jedisLock—redis分布式鎖實現(xiàn)示例代碼
- Java編程redisson實現(xiàn)分布式鎖代碼示例
- redis實現(xiàn)加鎖的幾種方法示例詳解
- redis鎖機制介紹與實例