如何通過Redis實現分布式鎖

2021-10-05 18:16:32 字數 766 閱讀 7310

目錄

分布式鎖需要解決的問題

如何通過redis實現分布式鎖

如何解決setnx長期有效的問題

大量的key同時過期的注意事項

➢互斥性(任意時刻,只能有乙個客戶端獲取鎖)

➢安全性(鎖只能由持有該鎖的客戶端刪除)

➢死鎖(獲取鎖的客戶端因為某些原因宕機而未能釋放鎖,其他客戶端就無法獲取鎖)

➢容錯(當一些redis結點宕機的時候,客戶端仍然能獲取鎖或釋放鎖)

setnxkey value :如果key不存在,則建立並賦值

➢時間複雜度: 0(1)

➢返回值:設定成功,返回1;設定失敗,返回0

expirekey seconds

➢設定key的生存時間,當key過期時(生存時間為0),會被自動刪除

➢缺點:原子性得不到滿足

那麼如何解決原子性問題呢?

set key value[ex seconds] [px milliseconds] [nx[xx]

➢ex second:設定鍵的過期時間為second秒

➢px millisecond:設定鍵的過期時間為millisecond毫秒

➢nx:只在鍵不存在時,才對鍵進行設定操作

➢xx:只在鍵已經存在時,才對鍵進行設定操作

➢set操作成功完成時,返回ok ,否則返回nil

大量key同時過期,會出現卡頓現象

如何通過Redis實現分布式鎖

互斥性,安全性,死鎖,容錯 時間複雜度 o 1 返回值 設定成功,返回1 設定失敗,返回0。expire key seconds 設定key的生存時間,當key過期時 生存時間為0 會自動刪除 缺點 原子性得不到滿足 set key value ex secounds px milliseconds...

通過Redis實現分布式鎖

當多執行緒的情況,可用redis來實現鎖。關於分布式鎖的原理網上很多,我這裡就只給出其中一種寫法。spring redis host 192.168.119.103 port 6379 password 123456附上 package com.redis.service import org.sl...

通過Redis實現分布式鎖

分布式鎖是控制分布式系統或不同系統之間共同訪問共享資源的一種鎖的實現 如果不同的系統或同一系統的不同主機間共享某一資源時,往往需要通過互斥來防止彼此干擾,以此來保證一致性。互斥性 任一時刻只能有乙個客戶端獲取鎖,不能有兩個客戶端都獲取到鎖 安全性 鎖只能被持有該鎖的客戶端刪除,不能由其他客戶端刪除 ...