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 的分布式锁,它内置了看门狗机制和可重入支持。