當多執行緒的情況,可用redis來實現鎖。
關於分布式鎖的原理網上很多,我這裡就只給出其中一種寫法。
spring:
redis:
host: 192.168.119.103
port: 6379
password: 123456
附上**:
package com.redis.service;
import org.slf4j.logger;
import org.slf4j.logge***ctory;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.data.redis.core.stringredistemplate;
import org.springframework.stereotype.component;
import org.springframework.util.stringutils;
/** * 分布式鎖
* @author hongcj
* @version v1.0
* @since 2017-08-24 11:02
*/@component
public class redislock
//以下為預防死鎖的情況,出現死鎖的情況有很多,如io異常,程式報錯等導致解鎖失敗
//1.獲取redis裡的當前值
string currentvalue = redistemplate.opsforvalue().get(key);
//2.判斷當前值是否已過期,過期情況進行下面操作
if (!stringutils.isempty(currentvalue) && long.parselong(currentvalue) < system.currenttimemillis())
}return false;
}/**
* 解鎖
* @param key
* @param value
* @return
*/public void unlock(string key,string value)
}catch (exception e)",e);}}
}
通過Redis實現分布式鎖
分布式鎖是控制分布式系統或不同系統之間共同訪問共享資源的一種鎖的實現 如果不同的系統或同一系統的不同主機間共享某一資源時,往往需要通過互斥來防止彼此干擾,以此來保證一致性。互斥性 任一時刻只能有乙個客戶端獲取鎖,不能有兩個客戶端都獲取到鎖 安全性 鎖只能被持有該鎖的客戶端刪除,不能由其他客戶端刪除 ...
如何通過Redis實現分布式鎖
互斥性,安全性,死鎖,容錯 時間複雜度 o 1 返回值 設定成功,返回1 設定失敗,返回0。expire key seconds 設定key的生存時間,當key過期時 生存時間為0 會自動刪除 缺點 原子性得不到滿足 set key value ex secounds px milliseconds...
如何通過Redis實現分布式鎖
目錄 分布式鎖需要解決的問題 如何通過redis實現分布式鎖 如何解決setnx長期有效的問題 大量的key同時過期的注意事項 互斥性 任意時刻,只能有乙個客戶端獲取鎖 安全性 鎖只能由持有該鎖的客戶端刪除 死鎖 獲取鎖的客戶端因為某些原因宕機而未能釋放鎖,其他客戶端就無法獲取鎖 容錯 當一些red...