范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

分布式锁

  分布式锁锁
  还记得我们学习多线程那会有一个经典的防止超卖的案例吗?双十一商家举行了一场空前的活动,很多商品都参加了秒杀,其中有一个商品只有5件库存,如果让你模拟一场对这个商品的秒杀活动,你会怎么编写程序呢?很多人可能已经胸有成足地想好了,相信有不少人是这样写的。
  首先编写商品类      public class Good{         Integer count=5;          /**          * 卖出一件商品,模拟一次用户点击和请求          */         public void sale(){             if(count>0){                 this.count-=1;                 System.out.println("卖出一件商品,剩余:"+count);             }         }         public Integer getCount() {             return count;         }      }
  再来启动多个线程来模拟秒杀    Good good = new Good();   while (good.getCount()>0){       new Thread(()->{           good.sale();       }).start();   }   System.out.println("抢购结束");
  好了,如果此时点击运行,理想中打印的结果是这样的  卖出一件商品,剩余:4 卖出一件商品,剩余:3 卖出一件商品,剩余:2 卖出一件商品,剩余:1 卖出一件商品,剩余:0 抢购结束
  可实际上大概率并不是理想中的结果,而是类似这样的  卖出一件商品,剩余:4 卖出一件商品,剩余:3 卖出一件商品,剩余:1 卖出一件商品,剩余:2 卖出一件商品,剩余:4 卖出一件商品,剩余:4 卖出一件商品,剩余:4 卖出一件商品,剩余:-2 卖出一件商品,剩余:-5 卖出一件商品,剩余:-4 抢购结束 卖出一件商品,剩余:-2
  怎么解决这个问题,防止出现超卖和类似问题呢?相信大家已经懂了,那便是今天的主角:锁。  Lock和synchronized
  在单体流行的时代,对于解决上面的问题,最容易想到的有两种解决方案:  Lock  ReentrantLock lock = new ReentrantLock();   Good good = new Good();   while (good.getCount()>0){       new Thread(()->{           lock.lock();           good.sale();           lock.unlock();       }).start();   }   System.out.println("抢购结束"); synchronized      Object lock = new Object();       Good good = new Good();       while (good.getCount()>0){           new Thread(()->{               synchronized(lock){                   good.sale();               }           }).start();       }       System.out.println("抢购结束");
  本文的重点是分布式锁,故不再详细讲解Lock和synchronized的用法,感兴趣的同学可以自行进行学习。  分布式锁
  微服务越来越流行,上面的两种方式在微服务中已经变的不再适用,试想一下,某服务运行在3台服务器上,第一个请求在A服务器上获得了锁,此时第二个请求进入B服务器,此时它仍然可以获得锁。为了解决Lock和synchronized的局限性,分布式锁便派上用场了。
  分布式锁有不同的觉得方案,有用ZooKeeper实现有,有基于ETCD实现的,也有基于Redis实现的,具体采用什么方案,需要综合具体场景以及当前已经使用的技术栈来决定,本文以Redis为例来讲述通用的案例。  基于spring boot starer的实现
  Spring Boot 实现 Redis 分布式锁在 spring-integration 这个项目中,所以需要这三个依赖:                  org.springframework.boot             spring-boot-starter-data-redis                               org.springframework.boot             spring-boot-starter-integration                               org.springframework.integration             spring-integration-redis         
  配置  @Bean(destroyMethod = "destroy") public RedisLockRegistry redisLockRegistry(RedisConnectionFactory redisConnectionFactory) {     return new RedisLockRegistry(redisConnectionFactory, "lock"); }
  示例      @Autowired     RedisLockRegistry redisLockRegistry;     @Test     public void test(){         Good good = new Good();         while (good.getCount()>0){           new Thread(()->{               Lock obtain = redisLockRegistry.obtain("lock-key");               try {                   boolean b = obtain.tryLock(10, TimeUnit.SECONDS);                   if(success){                       good.sale();                   }               } catch (InterruptedException e) {                   e.printStackTrace();                   obtain.unlock();               }finally {                   obtain.unlock();               }           }).start();       }       System.out.println("抢购结束");     } 基于Redisson的实现  Good good = new Good();   while (good.getCount()>0){     new Thread(()->{         Lock obtain = redisLockClient.getLock("key");         try {             boolean success = obtain.tryLock(10, TimeUnit.SECONDS);             if(success){                 good.sale();             }         } catch (InterruptedException e) {             obtain.unlock();         }finally {             obtain.unlock();         }      }).start();   }   System.out.println("抢购结束");
  当然,本案例只是讲解分布式锁的使用方法,并不一定完全切合所有的使用场景,例如上诉案例中关于库存量,实际场景中便不能直接存储在内存中,而是使用redis等进行存储
  更多Java学习资料关注我免费领取

三款齐发!RedmiNote9剑指千元市场,续航配置再升级在昨天,卢伟冰一口气带来了多个消息,除了RedmiNote系列销量突破1。4亿外,貌似还在为新机发布做铺垫,没想到来到今天,11月26号周四,RedmiNote9系列新机正式发布。边玩游戏边给手机充电,这款神器你肯定没耍过我是80后,从最早的红白机小霸王到后来的PSP索尼playstation,都玩过。游戏是越做越精致,可以前的游戏仍是经典,满满都是怀念。不瞒各位,10多年前,实际上那个时候小霸王也央视轮番报道,人民网又发长文这个国产手机今年有点火昨天(10月22日),人民网微信公众号发布文章开售1分钟全渠道销售额破亿!这款手机何以逆势突围?,对一加8T手机首销成绩1分钟销售额破亿10分钟破2亿,进行了深入报道。人民网称今年有智能无界限,华为Mate40系列打造全球领先全场景智慧生活10月30号,我们一直关注的2020华为年度旗舰新品发布了。经过八年十代的不断积淀,华为Mate40系列聚合影像系统交互芯片智慧全场景等技术并实现了全面突破,为我们带来一场科技盛宴小米三季度成绩出乎意料!多项经营数据报喜,手机营收是亮点在双十一我们就知道,小米手机的销量真的是让人出乎意料。其实作为极致性价比的代表,小米手机一直在国内都是销量王者。这次Q3报告中,手机出货量也是是相当的亮眼了!我们看到,小米智能手机11。11返场手机怎么选?看着一篇总结就够了11。11的落幕并不意味着活动优惠的结束,对于手机厂商来说,返场优惠也是另一个重要的战场。在此次斩下显赫战果的iQOO再接再厉,推出了节后最大的返场福利,覆盖iQOO在售全部产品,又一次巅峰!RedmiNote9打造三千元内最强手机RedmiNote9系列将于11月26日正式发布。距离发布会还有几天的时间,那么该机的配置也在陆续曝光了!今天,有爆料称,RedmiNote9系列将会采用后置一亿像素摄像头设计。不资深手游党告诉你,北通Betop阿修罗3游戏手柄会改变你认知游戏人生,生活要有仪式感,用手柄玩游戏,游戏相同,但体验更佳!专注游戏的爱好者,就应该入手一个手柄。经常玩游戏的朋友都会知道,拥有一个优质的游戏手柄,不仅能大大提高游戏体验,还能有SEC诉讼后,XRP价格突然暴跌至0。26美元XRP的价格已经跌至0。26美元,根据CoinMarketCap的数据显示,这标志着过去一天内下跌了42。XRP的价格在周一开始暴跌,当时与XRP相关的公司RippleLabs宣布备受追捧!上百款智能产品销售火爆,小米米粉节凭什么卖出28。9亿4月6日早7点,小米董事长兼CEO雷军发微博庆祝小米的10周岁生日,过去十年无数记忆留在我心里,仿佛就在昨天。接着他附上了2012年小米两周岁时,一位米粉拍摄的一组心形照片,并许诺Ripple得2021,他的未来会如何我们已经进入2021年几周了,但现在预测还不算晚尤其是在加密世界,Ripple的团队从与美国金融监管机构的斗争中抽身出来,提出了对未来一年的预测。在其网站上一篇题为加密和区块链。展
HarmonyOS(鸿蒙系统)加持下荣耀(Play4)又推送更新上线OS随着华为国产系统(鸿蒙OS)的研发成功推送上线,华为的国产OS分布式操作系统,真正的实现了万物互联的应用场景。笔者自从用华为品牌的手机以来,华为上线推送(鸿蒙OS)后,就更新了这款马上三月份,即将发布的几款手机,华为荣耀苹果均有新品2月份的发布会热潮结束了,什么红米K50电竞版oppofindX5等等,但是上半年的新机还没有结束,接下来还有更令人激动的华为荣耀苹果等发布会,我们一起来看看都有哪些手机吧。第一款华为隐藏大招!全新麒麟5G芯片出现,两款两千档廉价新机齐发虽然遭到了史无前例的打压导致华为不保昔日的国产手机一哥地位,但很明显华为并不想在今年碌碌无为,还是希望能够继续维持运转,坚持到拨开云雾见青天的那一天。这段时间国产厂商纷纷发布新机,教你19种关闭小米手机广告方法本内容来源于什么值得买APP,观点仅代表作者本人作者薄荷有点凉其实哪个安卓手机品牌多少都有广告投放,只是形式不同而已,关键是如何关掉广告。由于这两年一直用小米手机,手机安装好需要的8个压箱底的宝藏App,实用又强大,手机秒变黑科技突然想问大家一个问题,你们的手机上都有哪些好用的App?今天我就来推荐8个压箱底的宝藏App,实用又强大,让你的手机秒变黑科技。01秒启动特色1秒启动手机应用。现在的很多App启动vivox20手机可以用几年?如果是从寿命上来讲,应该是属于因人而异的事情,都能看到不少爱护的好的人的手机,用个四五年的都大有人在,还有些爱护不好的,基本上几个月就歇菜,当然,这也取决于手机厂商的用料质量问题,在美国硅谷工作的码农,有什么工作上的烦恼?估计大家都认为在硅谷做软件工程师是非常幸福的事情,拿着令人艳羡的高薪享受着各种各样的免费福利,不过这些福利的背后要付出的努力却是大家不知道的。那些令人艳羡的高薪和福利作为世界科技之面对智能手表的独立化课题,手机厂商走出了四种路线新年伊始,苹果放出了一则广告片。公路海洋农场,镜头从高空俯视,缓慢推进,并依次切换。广袤而平坦的地面,被渲染了一层阴暗的色调,一直延伸到天际。广告片时长一分钟,但直到结束,画面中都百度屏蔽了中国裁判文书网,这事没那么简单近日,在百度身上发生了一件匪夷所思的事儿。2月21日上午,有人在百度搜索中国裁判文书网相关词条,搜索结果显示,没有找到与中国裁判文书网相关的网页,而搜狗必应等搜索引擎均可正常搜索。聊两个最具潜力的板块昨天聊了三个大家关心的板块,今天说说当下最具投资潜力的板块!我说的机会是什么机会呢?是那种足以实现财富自由,实现你下一代财富,人生自由的板块!1,芯片半导体!不论电动汽车,光伏新能AirPods怎么选?入手前这些细节须知悉可以看到,去牛秋季不仅全新发布了AirPods3,苹果还悄悄的将AirPodsPro的充电盒更新为了MagSafe充电盒,支持磁吸充电。这样对比三款耳机的区别,你就会发现相比前代,