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