分布式鎖具有的特性:
1、排他性:
檔案系統:
資料庫:主鍵 唯一約束 for update
效能較差,容易出現單點故障
鎖沒有失效時間,容易死鎖
快取redis:setnx
實現複雜:
存在死鎖(或短時間死鎖)的可能
zookeeper:類似檔案系統
實現相對簡單
可靠性高
效能較好
應用場景:
自動生成編碼,格式為:"yyyymmdd001"
多客戶同時提交資料,資料庫裡出現多人儲存乙個編碼。應實現效果,每人乙個編碼。
解決方案:
1、在redis裡,建立乙個編碼池(每天凌晨1點初始化)。
2、每次專案啟動,初始化redis編碼池
3、編碼池裡沒有編碼,去資料庫裡查詢當天最大編碼,然後+1
public inte***ce icodenumredisservice
@servicepublic class codenumredisserviceimpl implements icodenumredisservice
redistemplate.delete(constans.init_num_lock);
}return true;
}/**
* @author: qsy
* @date: created in 下午 3:01 2019/1/3/003
* @description: 獲取編碼
*/@override
public string getcodenum() }}
/*** @author: qsy
* @date: created in 下午 3:00 2019/1/3/003
* @description: 清空編碼池
*/@override
public boolean deletecodenumpool()
}
基於Redis實現分布式鎖
分布式鎖的基本功能 1.同一時刻只能存在乙個鎖 2.需要解決意外死鎖問題,也就是鎖能超時自動釋放 3.支援主動釋放鎖 分布式鎖解決什麼問題 多程序併發執行任務時,需要保證任務的有序性或者唯一性 準備 redis版本 2.6 redis是主從 sentinel模式 為了高可用 原理 redis2.6之...
基於Redis實現分布式鎖
之前專案中使用redis鎖實現秒殺等一些併發業務,在這裡整理一下基於redis實現分布式鎖的簡單入門例項,記錄一下,便於以後檢視 學習。springboot整合redisson分布式鎖 1 簡介 在分布式系統中存在併發場景,為了解決這一問題,基於redis鎖一定程度可以解決這一問題,但是也有缺點,如...
基於redis實現分布式鎖
實現方式 具備條件 確保鎖可用,必須要滿足一下幾個條件 1 互斥性,任意時刻只有乙個使用者能持有鎖 2 不會產生死鎖,假設某個使用者在持有鎖的期間由於服務崩潰或者其他原因沒有主動釋放鎖,也能保證後續其他使用者可以加鎖 3 加鎖和解鎖必須是同一使用者,b使用者無法解除a使用者加的鎖 實現 1 引入je...