推薦鏈接:
????總結(jié)——》【Java】
????總結(jié)——》【Mysql】
????總結(jié)——》【Redis】
????總結(jié)——》【Kafka】
????總結(jié)——》【Spring】
????總結(jié)——》【SpringBoot】
????總結(jié)——》【MyBatis、MyBatis-Plus】
????總結(jié)——》【Linux】
????總結(jié)——》【MongoDB】
????總結(jié)——》【Elasticsearch】
一、最簡單的實現(xiàn)
1、實現(xiàn):SETNX加鎖+DEL釋放鎖
// 加鎖:如果 key 不存在,才會設置它的值,否則什么也不做
SETNX lock_key 1
// 業(yè)務邏輯
DO THINGS
// 釋放鎖,刪除key
DEL lock_key
2、優(yōu)點
實現(xiàn)了加鎖和釋放鎖
3、缺點
參考鏈接:
Redis——》死鎖
Redis——》鎖被別人釋放
容易造成死鎖
二、最嚴謹?shù)膶崿F(xiàn)
1、實現(xiàn):SET加鎖 + 唯一標識 + 過期時間 + Lua腳本釋放鎖
(1)加鎖 + 唯一標識 + 過期時間
SET lock_key unique_value EX expire_time NX
(2)操作共享資源
(3)Lua腳本釋放鎖
GET判斷鎖是否歸屬自己,再DEL釋放鎖
//Lua腳本語言
//釋放鎖,先判斷這把鎖是否歸自己持有,比較unique_value是否相等,避免誤釋放
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
2、優(yōu)點
實現(xiàn)了加鎖和釋放鎖,不會出現(xiàn)死鎖和釋放別人的鎖。
三、Java實現(xiàn)分布式鎖
參考鏈接:
Java——》實現(xiàn)分布式鎖
Java——》使用Redisson實現(xiàn)分布式鎖文章來源:http://www.zghlxwxcb.cn/news/detail-685108.html
四、分布式鎖可能遇到的問題
參考鏈接:
Redis——》死鎖
Redis——》如何評估鎖過期時間
Redis——》鎖被別人釋放文章來源地址http://www.zghlxwxcb.cn/news/detail-685108.html
可能遇到的問題 | 解決方案 |
---|---|
死鎖 | 設置過期時間 |
過期時間評估不好,鎖提前過期 | 守護線程,自動續(xù)期 |
鎖被別人釋放 | 鎖寫入唯一標識,釋放鎖時先檢查標識,再釋放 |
到了這里,關于Redis——》實現(xiàn)分布式鎖的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!