Redis分布式锁
很多人在刚接触分布式系统的时候,都会遇到一个问题:
多个服务实例同时处理同一件事情,如何避免数据被重复处理?
例如:
* 用户抢优惠券
* 定时任务执行
* 库存扣减
* 订单状态更新
如果系统只有一个进程,其实很简单,用 本地锁(mutex) 就能解决。
但在微服务架构或者集群部署之后,问题就变了。
系统可能有:
* 10个服务实例
* 100个Worker
* 甚至多个数据中心
这时候,本地锁就完全失效了,因为不同进程之间根本不知道彼此的锁状态。
于是就出现了一个概念:
分布式锁(Distributed Lock)
分布式锁的目标很简单:
在分布式环境下,保证某一时刻只有一个节点能执行某段逻辑。
为什么 Redis 可以做分布式锁?
在实现分布式锁的时候,很多人第一反应是数据库。
例如:
select ... for update
但数据库锁的问题是:
* 性能差
* 锁粒度大
* 并发高时压力很大
于是大家开始寻找一个更适合做锁的系统。
Redis就非常合适。
原因很简单: