Redis 分布式锁解决的核心问题是:在分布式系统中,保证多个进程/服务对共享资源的互斥访问,防止并发冲突。
回复要点(面试/技术讨论场景):
1. 核心问题:分布式环境下的资源互斥
- 问题本质:单体应用中可用
synchronized/Lock实现线程安全,但分布式系统中多节点无法共享内存,传统锁机制失效。 - 具体场景:
- 多个服务节点同时操作同一数据库记录(如库存扣减)。
- 分布式任务调度中避免重复执行。
- 缓存击穿场景下防止大量请求穿透到数据库。
2. 核心解决思路
// Redis 分布式锁的核心原理:// 1. 利用 Redis 的原子操作(SET NX)保证只有一个客户端能获取锁// 2. 设置过期时间避免死锁// 3. 使用 Lua 脚本保证释放锁的原子性// 获取锁(伪代码)SET lock_key unique_value NX PX 30000 // NX: 不存在才设置,PX: 毫秒过期// 释放锁(Lua 脚本,保证原子性)if redis.call('get', KEYS[1]) == ARGV[1] thenreturn redis.call('del', KEYS[1])elsereturn 0end
3. 关键特性与问题
| 特性 | 说明 |
|---|---|
| 原子性 | 通过 SET NX 和 Lua 脚本保证操作不可分割 |
| 超时机制 | 设置过期时间(如 30s),防止客户端崩溃导致死锁 |
| 锁续期 | 长时间任务需定时续期(如 Redisson 的 Watch Dog 机制) |
| 可重入性 | 同一客户端可重复获取同一锁(需额外设计) |
| 公平性 | 默认非公平锁,可通过队列实现公平锁 |
4. 常见问题与解决方案
- 锁过期导致并发问题:使用 Redisson 的自动续期机制。
- 锁释放误删:通过唯一标识(UUID)确保只释放自己的锁。
- 主从同步延迟:使用 RedLock 算法或依赖 Redis Cluster。
5. 总结
Redis 分布式锁通过原子操作和过期机制,解决了分布式系统中多节点对共享资源的互斥访问问题,是实现分布式一致性的基础组件。
简洁版回复(适合快速回答):
Redis 分布式锁核心解决的是分布式环境下多个服务节点对共享资源的并发访问控制问题,通过 Redis 的原子操作(如 SET NX)保证同一时间只有一个节点能获取锁,结合过期时间和续期机制防止死锁,确保分布式系统的数据一致性和操作原子性。
正文完