一、分布式锁的核心需求
在分布式系统中,多个节点可能同时访问共享资源(如数据库、文件),分布式锁的核心目标是确保同一时间只有一个节点能操作共享资源,避免数据不一致。其需满足以下关键条件:
-
互斥性:锁只能被一个节点持有;
-
无死锁:即使持有锁的节点崩溃,锁也能自动释放;
-
容错性:只要大部分Redis节点正常,锁服务仍可用;
-
归属明确:只有持有锁的节点能释放锁(解铃还须系铃人)。
二、基础实现:单节点Redis分布式锁
1. 加锁:原子操作(SET命令)
使用Redis的SET命令结合NX(仅当键不存在时设置)和PX(设置过期时间)参数,原子化完成“检查锁是否存在”和“设置锁”操作。
命令格式:
SET lock_key unique_value NX PX expire_time
-
lock_key:锁的名称(如order_lock),代表要保护的共享资源; -
unique_value:唯一标识符(如UUID),用于区分不同节点的锁(避免释放他人锁); -
NX:仅当lock_key不存在时设置成功; -
PX:设置锁的过期时间(毫秒),防止节点崩溃导致死锁。
Java示例(使用Jedis):
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.SetParams;
import java.util.UUID;
public class RedisDistributedLock {
private Jedis jedis;
private String lockKey;
private String uniqueValue;
private int expireTime; // 过期时间(毫秒)
public RedisDistributedLock(Jedis jedis, String lo

最低0.47元/天 解锁文章
1010

被折叠的 条评论
为什么被折叠?



