方案一:
基于 Redis 的分布式锁1.其中使用了redis的 SETNX 和 SETEX;转载,redis介绍setnx、setex...
原理:通过SETNX设置k-v来获取锁,进入死循环,每次循环判断,如果存在key则继续循环,若不存在key了,则跳出循环执行方法体,执行完成后删除key来释放锁。
弊端:高并发情况,若多个线程同时进入循环,可能会导致加锁失败;SETNX是一个很耗时的操作。
2.使用RedLock来实现分布式锁(Redis推荐)
基于数据库的分布式锁基于数据库表进行锁,添加数据或者更新数据获取锁。
基于 Zookeeper 的分布式锁