分布式專案,在高併發的場景下防止資源的超載,例如秒殺超賣問題
利用了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實現分布式鎖.第一種 基於資料庫實現分布式鎖 特點 效能較差,容易出現單點故障 鎖沒有失效時間,容易思死鎖 非阻塞式的 不可重入 第二種基於快取實現分布式鎖 鎖沒有失效時間,容易...