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文章来源:https://www.toymoban.com/news/detail-645850.html
6、分布式锁还附带解决了缓存雪崩、缓存击穿问题。因为限制了单次访问量。文章来源地址https://www.toymoban.com/news/detail-645850.html
到了这里,关于Redis分布式锁问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!