基於redis分布式鎖的簡單實現

2021-09-10 19:27:52 字數 1665 閱讀 6320

步驟:引入依賴

<

!-- 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 的分布式鎖

分布式鎖在分布式應用中應用廣泛,想要搞懂乙個新事物首先得了解它的由來,這樣才能更加的理解甚至可以舉一反三。首先談到分布式鎖自然也就聯想到分布式應用。在我們將應用拆分為分布式應用之前的單機系統中,對一些併發場景讀取公共資源時如扣庫存,賣車票之類的需求可以簡單的使用同步或者是加鎖就可以實現。但是應用分布...