redis實現分布式鎖詳解

2021-10-23 04:14:26 字數 530 閱讀 1700

解決問題:應對高併發業務場景

為什麼可以實現?

首先redis是單執行緒的,這裡的單執行緒指的是網路請求模組使用了乙個執行緒(所以不需考慮併發安全性),即乙個執行緒處理所有網路請求,其他模組仍用了多個執行緒。

實現原理:

伺服器一的請求會先獲取到鎖,接下來如果來相同的請求,此時會返回獲取鎖失敗的狀態。直至本次請求結束後釋放鎖。

問題:問題還是有的,可能會有死鎖的問題發生,比如伺服器1設定完之後,獲取了鎖之後,忽然發生了宕機。

那後續的刪除key操作就沒法執行,這個key會一直在redis中存在,其他伺服器每次去檢查,都會返回0,他們都會認為有人在使用鎖,我需要等。

為了解決這個死鎖的問題,我們就就需要給key 設定有效期了。第一種就是在set完key之後,直接設定key的有效期 "expire key timeout" ,為key設定乙個超時時間,單位為second,超過這個時間鎖會自動釋放,避免死鎖。

Redis分布式鎖詳解

在網際網路分布式服務部署中,通常會遇到多個程序操作同乙個資源的情況,例如秒殺等,此文章主要介紹使用redis實現分布式鎖。redis為單程序單執行緒模式,採用佇列模式將併發訪問變為序列訪問。通常使用setnx 即set not exiest 來實現鎖,以下通過循序漸進的方式引入最終實現。方案一1.c...

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

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

redis實現分布式鎖

隨便 系統越來越大,各功能模組除了垂直切割以外,同時也得做集群處理,那麼問題來了,在多執行緒情況下對於資源的競爭就需要乙個統一的訪問限制。以選課系統為例子,集群中各節點對課程可選數量同時操作,這裡就需要同步了,否則會導致最後選到的數量比可選的數量大,這裡我們的分布式鎖就派上用場了。利用redis來實...