返回列表

Redis 分布式锁的正确打开方式

中间件
2026年6月25日
王五
Redis微服务

前言

分布式锁是微服务架构中保证数据一致性的重要手段。

1. 基础实现

java
// SET NX EX 实现分布式锁
String lockKey = "lock:order:" + orderId;
String requestId = UUID.randomUUID().toString();
Boolean locked = redisTemplate.opsForValue()
    .setIfAbsent(lockKey, requestId, 30, TimeUnit.SECONDS);

2. Redisson 方案

Redisson 提供了更完善的分布式锁实现:

java
RLock lock = redissonClient.getLock("order:lock:" + orderId);
try {
    if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {
        // 业务逻辑
    }
} finally {
    if (lock.isHeldByCurrentThread()) {
        lock.unlock();
    }
}

3. 常见陷阱

  • 锁过期但业务未完成(需 watchdog 机制)
  • 误删他人锁(需校验 requestId)
  • 主从切换导致锁丢失

总结

生产环境推荐使用 Redisson 的分布式锁,它内置了看门狗机制和可重入支持。

苏ICP备2026043658号-1