北京哪家医院看白癜风 http://wapyyk.39.net/bj/zhuanke/89ac7.html前言
白嫖掘金很久了,最近学习了redis分布式锁的相关的知识,决定还是写一篇文章分享给大家,一是加强自己的记忆,二是希望能够给想了解相关知识的朋友一点思路。本文将使用nginx和2个集群的微服务来给大家展示为啥要用分布式锁,以及后面一步步的分析加锁的过程中会出现的问题。
简单的demo程序
这里有一个简单的demo程序,就是一个controller调用一次就操作一次redis减少一个库存
RestControllerpublicclassGoodController{AutowiredprivateStringRedisTemplatestringRedisTemplate;Value("${server.port}")privateStringserverPort;GetMapping("/buyGoods")publicStringbuyGoods(){Stringresult=stringRedisTemplate.opsForValue().get("goods");intgoodsNumber=result==null?0:Integer.parseInt(result);if(goodsNumber0){intrealNumber=goodsNumber-1;stringRedisTemplate.opsForValue().set("goods",String.valueOf(realNumber));System.out.println("成功买到商品,库存还剩下"+realNumber+"件"+"\t服务提供窗口"+serverPort);return"成功买到商品,库存还剩下"+realNumber+"件"+"\t服务提供窗口"+serverPort;}else{System.out.println("商品已经售完/活动结束/调用超时,欢迎下次光临"+serverPort);}return"商品已经售完/活动结束/调用超时,欢迎下次光临"+serverPort;}}复制代码
其他配置类就不贴了,主要就是这么一个功能。然后同样的代码,复制到另一个项目中。起两个微服务做集群。唯一区别就是一个端口是另一个端口是
接着利用nginx转发和负载均衡nginx的配置如下
upstreammynginx{ server.0.0.1:weight=1; server.0.0.1:weight=1;}server{listen80;server_namelocalhost;#charsetkoi8-r;#access_loglogs/host.access.logmain;location/{proxy_pass