0.分布式锁的背景
1.100台服务器处理1000万个用户抢1亿红包的问题
如下图所示,分布式锁要保证红包扣钱方法在同一时间只能被一个机器的一个线程执行;否则可能会导致超发。
所以可以额外加入1个服务(分布式锁),让100台服务器去她那里获取锁。
1.什么是分布式锁?
1.分布式锁应该具备哪些条件?
- 1.在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;
- 2.高可用的获取锁与释放锁;
- 3.高性能的获取锁与释放锁;
- 4.具备可重入特性(可理解为重新进入,由多于一个任务并发使用,而不必担心数据错误);
- 5.具备锁失效机制,防止死锁;
- 6.具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败。
2.分布式锁的实现
Redis:利用setnx命令,此命令同样是原子性操作,只有在key不存在时,才能set成功。