步驟:引入依賴
<
!-- springboot整合redis --
>
org.springframework.boot<
/groupid>
spring-boot-starter-data-redis<
/artifactid>
<
/dependency>
加鎖以及 解鎖工具類
package com.hzrys.atplatform.finance.utils;
import lombok.extern.slf4j.slf4j;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.data.redis.core.stringredistemplate;
import org.springframework.stereotype.component;
import org.springframework.util.stringutils;
/** * created with intellij idea.
* user: 摘自***.
* date: 2019/2/2.
* time: 下午 10:05.
* explain:redis分布式鎖
*/@component
@slf4j
public
class
redislock
//判斷鎖超時 - 防止原來的操作異常,沒有執行解鎖操作 防止死鎖
string currentvalue = stringredistemplate.
opsforvalue()
.get
(key)
;//如果鎖過期
//currentvalue不為空且小於當前時間if(
!stringutils.
isempty
(currentvalue)
&& long.
parselong
(currentvalue)
< system.
currenttimemillis()
)}return
false;}
/** * 解鎖
** @param key
* @param value
*/public
void
unlock
(string key, string value)
}catch
(exception e)
", e);}
}}
業務**的加解鎖過程
private
static
final
int timeout =10*
1000
;//超時時間 10s
@org
.junit.test
public
void
testredislock2()
throws interruptedexception
else
}}
簡單適用基於redis的分布式鎖
public class lock private long lockttl value private long lockwait public lock stringredistemplate stringredistemplate public boolean lockwait string ...
基於redis的分布式鎖
public class redislock 加鎖 取到鎖加鎖,並返回值用於解鎖 取不到鎖則立即返回 1 param millitimeout 最長鎖定時間,超時後自動刪除鎖,避免死鎖 return public synchronized long lock long millitimeout lo...
基於 Redis 的分布式鎖
分布式鎖在分布式應用中應用廣泛,想要搞懂乙個新事物首先得了解它的由來,這樣才能更加的理解甚至可以舉一反三。首先談到分布式鎖自然也就聯想到分布式應用。在我們將應用拆分為分布式應用之前的單機系統中,對一些併發場景讀取公共資源時如扣庫存,賣車票之類的需求可以簡單的使用同步或者是加鎖就可以實現。但是應用分布...