實現 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 獲取鎖的過期...