聊 Redis 分布式锁时,很多讨论会一上来就跳到实现细节,但如果问题本质没抓住,细节很容易越讲越散。它真正要解决的核心问题,其实是分布式环境里多个节点如何对同一共享资源保持互斥访问。
单机锁到了分布式环境就不够用了
在单体应用里,用 synchronized 或本地锁就能保护共享资源;可一旦服务拆成多个实例,本地内存已经不共享,原来的线程锁再正确,也挡不住别的节点同时操作同一份数据。
Redis 只是承载互斥语义的实现载体
选择 Redis,不是因为它天然等于“分布式锁”,而是因为它提供了足够快、足够简单的原子操作,能帮助多个节点竞争同一个锁标记。关键仍然是围绕共享资源建立统一的互斥规则。
互斥之外还要处理超时和误释放
如果只有“抢到锁的人才能执行”这一层,还不够。生产环境里还要考虑客户端崩溃后的自动过期、长任务续期、以及只允许持锁者自己释放锁,否则很容易从死锁变成误删锁。
别把所有并发问题都交给分布式锁
分布式锁适合保护少量关键共享操作,但它不是并发系统的万能补丁。库存扣减、定时任务去重和缓存击穿保护这些场景适合用它;如果只是为了弥补本该由幂等和状态机解决的问题,往往会越用越重。
结论
Redis 分布式锁最核心的价值,是在跨节点场景下为共享资源建立互斥访问规则。理解这一点后,再去讨论超时、续期和实现细节才有意义。
正文完




