真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

實(shí)現(xiàn)鎖定一個(gè)redis的案例-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)實(shí)現(xiàn)鎖定一個(gè)redis的案例,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

10年積累的網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有鐘樓免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

redis加鎖分類

redis能用的的加鎖命令分別是INCR、SETNX、SET。

1、第一種鎖命令I(lǐng)NCR

這種加鎖的思路是,key不存在,那么key的值會(huì)先被初始化為0,然后再執(zhí)行INCR操作進(jìn)行加一。
然后其它用戶在執(zhí)行INCR操作進(jìn)行加一時(shí),如果返回的數(shù)大于1 ,說明這個(gè)鎖正在被使用當(dāng)中。

1、客戶端A請(qǐng)求服務(wù)器獲取key的值為1表示獲取了鎖

2、客戶端B也去請(qǐng)求服務(wù)器獲取key的值為2表示獲取鎖失敗

3、客戶端A執(zhí)行代碼完成,刪除鎖

4、客戶端B在等待一段時(shí)間后在去請(qǐng)求的時(shí)候獲取key的值為1表示獲取鎖成功

5、客戶端B執(zhí)行代碼完成,刪除鎖

$redis->incr($key);
$redis->expire($key, $ttl); //設(shè)置生成時(shí)間為1秒

2、第二種鎖SETNX

這種加鎖的思路是,如果key不存在,將key設(shè)置為value

如果key已存在,則SETNX不做任何動(dòng)作

1、 客戶端A請(qǐng)求服務(wù)器設(shè)置key的值,如果設(shè)置成功就表示加鎖成功

2、 客戶端B也去請(qǐng)求服務(wù)器設(shè)置key的值,如果返回失敗,那么就代表加鎖失敗

3、 客戶端A執(zhí)行代碼完成,刪除鎖

4、 客戶端B在等待一段時(shí)間后在去請(qǐng)求設(shè)置key的值,設(shè)置成功

5、 客戶端B執(zhí)行代碼完成,刪除鎖

$redis->setNX($key, $value);
$redis->expire($key, $ttl);

3、第三種鎖SET

上面兩種方法都有一個(gè)問題,會(huì)發(fā)現(xiàn),都需要設(shè)置key過期。那么為什么要設(shè)置key過期呢?如果請(qǐng)求執(zhí)行因?yàn)槟承┰蛞馔馔顺隽?,?dǎo)致創(chuàng)建了鎖但是沒有刪除鎖,那么這個(gè)鎖將一直存在,以至于以后緩存再也得不到更新。于是乎我們需要給鎖加一個(gè)過期時(shí)間以防不測。

但是借助Expire來設(shè)置就不是原子性操作了。所以還可以通過事務(wù)來確保原子性,但是還是有些問題,所以官方就引用了另外一個(gè),使用SET命令本身已經(jīng)從版本2.6.12開始包含了設(shè)置過期時(shí)間的功能。

1、 客戶端A請(qǐng)求服務(wù)器設(shè)置key的值,如果設(shè)置成功就表示加鎖成功

2、 客戶端B也去請(qǐng)求服務(wù)器設(shè)置key的值,如果返回失敗,那么就代表加鎖失敗

3、 客戶端A執(zhí)行代碼完成,刪除鎖

4、 客戶端B在等待一段時(shí)間后在去請(qǐng)求設(shè)置key的值,設(shè)置成功

5、 客戶端B執(zhí)行代碼完成,刪除鎖

$redis->set($key, $value, array('nx', 'ex' => $ttl)); //ex表示秒

關(guān)于實(shí)現(xiàn)鎖定一個(gè)redis的案例就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


分享題目:實(shí)現(xiàn)鎖定一個(gè)redis的案例-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://weahome.cn/article/dgcejp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部