目錄
一、簡介
二、代碼實現
1、maven添加依賴
2、核心邏輯代碼
3、使用方式
三、總結
一、簡介
我們知道在Java中可以通過關鍵字synchronized來防止并發引起的問題,而分布式中就需要考慮分布式鎖了,今天來講一個比較簡單的實現,通過redis實現分布式鎖,為什么要用redis呢?因為redis很快,還有很多優點,具體可以查看我歷史寫的文章---------------深入了解Redis:性能、應用場景與常見問題解決方案_redis應用場景及出現的問題-CSDN博客
二、代碼實現
1、maven添加依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
2、核心邏輯代碼
/*** 通過redis簡單實現分布式鎖* @author zengLingYao* @date 2025/8/27 21:16*/
@Component
public class ZengLingYaoService {@Resourcepublic RedisTemplate redisTemplate;/*** 獲取鎖* 成果獲取鎖,返回true* 失敗返回false* @param key 鎖標識用于區分不同鎖* @param timeout 有效時間* @param timeUnit 時間單位*/public Boolean tryLock(String key, long timeout, TimeUnit timeUnit){return redisTemplate.opsForValue().setIfAbsent(key, "1", timeout, timeUnit);}/*** 解鎖* @param key 鎖標識用于區分不同鎖*/public void unlock(String key) {redisTemplate.delete(key);}}
3、使用方式
/*** 演示使用分布式鎖*/public void zengLingYao(String id) {boolean getLock = zengLingYaoService.tryLock(id, 180, TimeUnit.SECONDS);if (!getLock) {throw new RuntimeException("別人也在操作,你等會再試");}try {// 執行業務邏輯}finally {zengLingYaoService.unlock(id);}}
三、總結
1、setIfAbsent是原子性操作所以不會并發
2、key用來區分不同業務
3、設計過期時間,避免了死鎖情況