包虫病

注册

 

发新话题 回复该主题

让我来告诉你redis为什么要用分布式锁 [复制链接]

1#
北京哪家医院看白癜风         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

分享 转发
TOP
发新话题 回复该主题