分布式鎖的實現

2021-10-04 21:30:19 字數 1031 閱讀 5289

分布式專案,在高併發的場景下防止資源的超載,例如秒殺超賣問題

利用了redis的乙個特性,多個使用者設定同乙個key的value,只能有乙個使用者設定成功

@component

public

class

redislock

//解決死鎖問題

//大教室 佔了乙個位置 放一本書 死鎖

//保潔阿姨 固定時間 清理 教室

//給鎖設定乙個有效期 10秒 過期鎖釋放掉

//判斷當前鎖有沒有過期

string currentvalue =

(string) redistemplate.

opsforvalue()

.get

(key)

;//當前鎖的值儲存的是乙個時間字串

//判斷鎖是否過期if(

!stringutils.

isempty

(currentvalue)

&&long.

parselong

(currentvalue)

currenttimemillis()

)return

false;}

}

//解鎖

public

void

unlock

(string key,string value)

}catch

(exception e)

}

在使用鎖的類裡引用鎖的物件

@autowired

private redislock redislock;

在使用鎖的類裡面加**

public

void

test()

}

分布式鎖 使用Redis實現分布式鎖

關於分布式鎖的實現,我的前一篇文章講解了如何使用zookeeper實現分布式鎖。關於分布式鎖的背景此處不再做贅述,我們直接討論下如何使用redis實現分布式鎖。關於redis,筆主不打算做長篇大論的介紹,只介紹下redis優秀的特性。支援豐富的資料型別,如string list map set zs...

分布式鎖實現

1,資料庫實現原理 資料庫的行級x鎖。優點 不需要引入第三方應用。缺點 死鎖 對資料庫效能影響,可能較長時間占用資料庫連線資源 如果業務是分庫分表的,可能支援不了 示例 2,快取實現原理 通過setnx是否成功。當且僅當 key 不存在,將 key 的值設為 value 並返回1 若給定的 key ...

分布式鎖的實現

分布式鎖的實現方式通常有三種,第一種是基於資料庫實現分布式鎖,第二種是基於快取實現分布式鎖,第三種是基於zookeeper實現分布式鎖.第一種 基於資料庫實現分布式鎖 特點 效能較差,容易出現單點故障 鎖沒有失效時間,容易思死鎖 非阻塞式的 不可重入 第二種基於快取實現分布式鎖 鎖沒有失效時間,容易...