摘要:基本原理就是使用的命令來實現(xiàn)。將的值設為,當且僅當不存在。設置失敗時,說明這個鎖正在使用中。在一定時間內,循環(huán)請求,直到當前鎖釋放,然后獲得鎖實例前文中連接的方法獲取鎖失敗此處進行操作,操作完成后釋放鎖防止死鎖,超過分鐘刪除參考資料。
導語
需求就不細說了,想必都遇到過要用數據鎖的場景。看了一些資料以及其他的代碼,修改記錄下。
SETNX基本原理就是使用 Redis 的 SETNX 命令來實現(xiàn)。
將 key 的值設為 value ,當且僅當 key 不存在。若給定的 key 已經存在,則 SETNX 不做任何動作。
SETNX 是『SET if Not eXists』(如果不存在,則 SET)的簡寫。
返回值:
設置成功,返回 1 。
設置失敗,返回 0 。
設置失敗時,說明這個鎖正在使用中。在一定時間內,循環(huán)請求,直到當前鎖釋放,然后獲得鎖
實例setnx($redisKey, $redisValue); if (!$flag) { // 獲取鎖失敗 usleep(200000); continue; } // 此處進行操作,操作完成后釋放鎖 $redis->del($redisKey); return true; } // 防止死鎖,超過 5 分鐘刪除 if (time() - $redis->get($redisKey) > (60 * 5)) { $redis->del($redisKey); } return false; }
參考資料:SETNX。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30076.html
摘要:集群實現(xiàn)分布式鎖上面的討論中我們有一個非常重要的假設是單點的。但是其實這已經超出了實現(xiàn)分布式鎖的范圍,單純用沒有命令來實現(xiàn)生成。這個問題用實現(xiàn)分布式鎖暫時無解。結論并不能實現(xiàn)嚴格意義上的分布式鎖。 關于Redis實現(xiàn)分布式鎖的問題,網絡上很多,但是很多人的討論基本就是把原來博主的貼過來,甚至很多面試官也是一知半解經不起推敲就來面候選人,最近結合我自己的學習和資料查閱,整理一下用Redi...
摘要:由于執(zhí)行的原子性所以不要在中執(zhí)行過長開銷的程序,否則會驗證影響其它請求的執(zhí)行。同一個腳本生成的簽名都是相同的,所以簽名可以先在本地生成,然后在服務器上一次腳本,程序中只需保存和使用該簽名即可。同樣的腳本,是始終生成相同的簽名的。 Last-Modified: 2019年6月5日15:59:34 參考鏈接 PHP使用Redis+Lua腳本操作的注意事項 《Redis官方文檔》用Redi...
閱讀 3457·2021-11-25 09:43
閱讀 2605·2021-09-22 15:54
閱讀 591·2019-08-30 15:55
閱讀 974·2019-08-30 15:55
閱讀 1998·2019-08-30 15:55
閱讀 1741·2019-08-30 15:53
閱讀 3465·2019-08-30 15:52
閱讀 2039·2019-08-30 12:55