分布式系统的复杂之处在于在不同进程需要互斥的访问共享资源时的问题。例如,
1、分布式ID,当数据水平拆分之后,如何保证ID的唯一性,并且尽可能的短;
2、秒杀系统中的库存,数据结构为商品ID,剩余数量,每次成交会减掉响应数量。如何保证不会超卖;
锁的目的是确保多个节点、进程做同样工作的时候,只有一个可以执行成功。有且只有一次。
实现分布式锁有很多方案,例如基于数据库实现,基于zookeeper实现,如果吞吐量还是不能满足,比较广泛的做法是用分布式缓存来实现。
一、Redis单节点方式实现
核心就是围绕SETNX(SETIF NOT EXISTS)实现,