1.采用redis实现分布式锁,单台redis实现分布式锁,防止单点故障,可以采用红锁方式来做
问题1: 如果设置key的有效期过期了,但是业务还没有执行完。
解决方式是自己手动续约,按照有效期的n/3来延长key的的时间,具体时间需要根据业务压测 得出来
2.采用开源redisson来实现分布式锁,它内部已经实现了续期,默认key的有效期是30s, key的续期时间为10s,防止单点故障,可以采用红锁方式来做。
-
采用Zookeeper来实现分布式锁,zookeeper客户端curator提供分布锁的实现
-
mysql实现分布式锁(采用ThreadLocal + 数据库主键冲突)
-
RedisLockRegister来实现分布式锁(采用本地锁+redis来做)
总结:至于选择哪种方式需要根据项目需求和架构来选型,个人认为在大项目中采用zookeeper来实现分布式锁是最可靠的