Redis分布式锁问题

1、业务单机情况下

        问题:并发没有加锁导致线程安全问题。

        解决方法:加锁处理,如lock、synchronized

        仍有问题:业务分布式情况下,代码级别加锁已经无效。需要借助第三方组件,如redis、zookeeper。

2、业务分布式情况下,使用redis的setNX,实现加锁解锁,保证业务前加锁,业务后解锁。

        问题:1、业务异常导致解锁失败  2、机器异常导致解锁失败

        解决方案:对于1、try/finally finally中解锁  2、加锁时key添加超时时间

        引入新的问题:1、需要保证加锁和超时操作的原子性 2、业务运行超过超时时间,导致解锁了其他线程的锁 3、超时时间

3、分布式锁实现过程中遇到的问题

        问题:1、需要保证加锁和超时操作的原子性 2、业务运行超过超时时间,导致解锁了其他线程的锁

        解决方案:对于1、加锁命令同时设置超时  2、加锁前生成唯一uuid,锁value用该uuid,解锁时判断uuid是否相等。

        仍有问题:1、比对uuid和解锁的过程不是原子的  2、业务运行未结束,锁提前释放

4、分布式锁实现过程中遇到的问题、

        问题:1、比对uuid和解锁的过程不是原子的  2、业务运行未结束,锁提前释放

        解决方案:对于1、使用lua脚本 2、看门狗机制,实现锁续期

5、自己实现不如使用分布式锁实现方案Redisson

你可能感兴趣的:(redis,分布式,数据库)