利用Redis實現分布式鎖

2021-10-16 22:17:05 字數 1294 閱讀 9511

實現 redis 完成分布式鎖 所用到的指令 :

思路:

1 . 在執行具體的買票業務之前先通過  setnx 的指令去獲取其返回值,如果設定成功(返回值為1) 說明獲取到了鎖,沒有設定成功(返回值為0),則說明沒有獲取到鎖,繼續迴圈執行

2. 搶到鎖的執行緒先給key 設定過期時間,這一步主要是為了避免死鎖問題(在獲取鎖之後釋放鎖之前,如果程式出現異常,則不會釋放鎖,就會出現死鎖問題)

3. 執行具體的業務邏輯**

4. 釋放鎖(刪除 key )

具體**的實現:

package com.tk;

import redis.clients.jedis.jedis;

/** * #description : // 使用redis 實現分布式鎖

* #date: 2021/1/20 19:19

* @author : tiankun

*/public class redisdistributedlock

}/**

* 模仿人買票

*/class people implements runnable catch (interruptedexception e)

// 當沒有票的時候讓其他黃牛退出死迴圈

if(ticketcount < 1)

// 如果獲取到鎖繼續執行業務邏輯(購買票)

lock = jedis.setnx("ticket","true");

system.out.println(thread.currentthread().getname()+" ==> "+lock);

if(lock == 1)

}// 防止最後一張票被重複購買的問題

if(ticketcount < 1)

// 3.執行購買票業務邏輯

try catch (interruptedexception e)

buyticket();

// 4. 釋放鎖

jedis.del("ticket");}}

/*** 購買票

*/private void buyticket() catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"購買了票,剩餘的票數為"+(--ticketcount));

}}

利用redis實現分布式鎖

一.對於分布式的應用,一定程度上會增加處理的速度。但是也會帶來一些分布式上的麻煩,比如有個需求 後台程式部署在多台伺服器上,client向該後台程式傳送引數為 使用者賬號和 賬號型別 的rpc請求,後台程式需要返回該賬號對應的身份資訊 邏輯很簡單,先判斷庫中有沒有該賬號資訊,有就返回,沒有就新生成乙...

利用redis實現分布式鎖

因為redis是單執行緒程式,可以天然的保證執行緒安全,只要我們的命令是單條命令,就可以保證操作的安全性,而redis中給我們提供了setnx key value命令,setnx命令的作用就是當我們的redis中沒有這個key的鍵值隊時,就會建立這個鍵值隊的值,如果已經有了這個key就不作操作 所以...

golang 利用redis實現分布式鎖

redis知識準備 redis setnx命令 setnx 如果key不存在則建立,並返回true 如果key存在則不操作,並返回false redis ttl命令 如果對key設定了過期時間,則ttl命令返回key到過期時所剩餘的時間 如果key沒有設定過期時間,則ttl命令返回 1 獲取鎖的過期...