请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

分布式锁疑问

老师,看了分布式锁我有2点疑问:

  1. 当您调试模拟高并发时,tomcat1 debug到closeOrder时暂停等待,然后tomcat2放行(当前时间大于tomcat1写入锁的时间),然后您tomcat1也F8直接放行,那tomcat1中执行closeOrder方法,获取不到锁应该会出问题吧? https://img1.sycdn.imooc.com//szimg/5ae06390000127c611630275.jpg

  2.  这种分布式锁,假如我有10台机器做集群,那其实还是每个定时任务排队执行,那是不是没有充分发挥到集群的优势呢


正在回答

3回答

你好同学,很好的问题。

  1. 这个只是模拟一个场景,在 setnx的时候,只会有一个成功。

  2. 分布式锁就是解决在分布式环境下把并行做成串行,的确没有发挥集群优势, 这个和hadoop的map reduce是两种方式。

1 回复 有任何疑惑可以回复我~
  • 提问者 慕娘4261975 #1
    非常感谢老师的解答
    回复 有任何疑惑可以回复我~ 2018-05-10 09:43:21
  • Geely 回复 提问者 慕娘4261975 #2
    不客气,但是在分布式锁的时候我可以提供一个思路,就是在任务量非常大的时候,可以获取一些任务带走,然后释放锁。然后其他机器继续获取要做的任务。释放锁,然后获取锁的机器做任务。把获取锁和做任务再实现一层异步~提高分布式锁这种方式的效率。
    回复 有任何疑惑可以回复我~ 2018-05-14 16:23:22
  • 提问者 慕娘4261975 回复 Geely #3
    感谢老师的思路   我这样理解对不对,像我们这个商城业务,我们第一次只获取任务,打个标记,然后释放锁。不执行关单操作,把获取到的任务放入redis缓存或者mq当中,再由当前机器的另一个定时器去执行任务
    回复 有任何疑惑可以回复我~ 2018-05-15 19:51:17
提问者 慕娘4261975 2018-04-25 23:22:18

菠萝兄,这个是tomcat1执行到closeOrder方法时,暂停,然后tomcat2执行完后再放行tomcat1   在这节课程的第20分钟左右

0 回复 有任何疑惑可以回复我~
polo哦 2018-04-25 20:58:21

1、什么叫执行closeOrder方法获取不到锁,能执行closeOrder就一定会设定锁了

0 回复 有任何疑惑可以回复我~
  • 提问者 慕娘4261975 #1
    菠萝兄,这个是tomcat1执行到closeOrder方法时,暂停,然后tomcat2执行完后再放行tomcat1   在这节课程的第20分钟左右
    回复 有任何疑惑可以回复我~ 2018-04-26 09:12:58
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信