背景
就是保证同一时间只有一个客户端可以对共享资源进行操作
案例:优惠券领劵限制张数、商品库存超卖
核心
为了防止分布式系统中的多个进程之间相互干扰,我们需要一种分布式协调技术来对这些进程进行调度利用互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题避免共享资源并发操作导致数据问题
本地锁:synchronize、lock等,锁在当前进程内,集群部署下依旧存在问题分布式锁:redis、zookeeper等实现,虽然还是锁,但是多个进程共用的锁标记,可以用Redis、Zookeeper、Mysql等都可以加锁设计分布式锁应该考虑的东西
分布式锁一定能得到释放,比如客户端奔溃或者网络中断在分布式应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行排他性容错性满足可重入、高性能、高可用注意分布式锁的开销、锁粒度实现分布式锁可以用Redis、Zookeeper、Mysql数据库这几种,性能最好的是Redis且是最容易理解
分布式锁离不开key-value设置key是锁的唯一标识,一般按业务来决定命名,比如想要给一种优惠券活动加锁,key命名为“coupon:id”。value就可以使用固定值,比如设置成1
基于redis实现分布式锁,文档: