基於Redis實現分布式鎖,避免重複執行定時任務

2021-09-12 01:28:37 字數 426 閱讀 3206

spring提供了定時任務的功能,但是在多個例項的集群中,會出現定時任務重複執行多次的情況。

使用qutaz框架自帶的分布式定時任務可以很好的解決這個問題,但是講道理功能有些過於強大,對於需求不高,乃至可以一定程度上允許失誤的簡單任務中,價效比比較低。

使用task任務時,可以通過在redis等快取、資料庫中建立鎖來實現避免重複執行任務的功能。

基本思路如下:

當然這種實現方法是很粗糙的。對於高併發的頻繁定時任務處理很不完美。若執行失敗也會導致任務丟失。

本方案實現的處理場景是間隔比較長的資料處理定時任務。伺服器集群也只有三個節點,上線執行效果良好。

簡要實現**如下:

private boolean getlock(string key)elseelse}}

複製**

基於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...