redis实现分布式锁
加锁时注意:
1、保障赋值和设置过期时间两个操作的原子性
删锁时注意:
1、当执行时间大于锁的自动过期时间时,有可能删除别人的锁 需要在加锁的过程中,将value设置为uuid,删之前判断一下uuid是否和自己设置的一致。
2、保障判断uuid和删除锁两个操作的原子性
实现:
加锁时:set key uuid nx ex 过期时间
解锁时:lua脚本判断uuid并删除锁
至于代码没执行完就自动释放锁的情况,可以考虑使用redisson
io多路复用
非阻塞io+事件通知