当前位置: 首页 > wzjs >正文

网站建设智能优化深圳龙岗好玩的地方

网站建设智能优化,深圳龙岗好玩的地方,网站宣传的方法有哪些,北京定制网络营销收费目录 本地锁的局限性 Redisson解决分布式锁问题 在分布式环境下,分布式锁可以保证在多个节点上的并发操作时数据的一致性和互斥性。分布式锁有多种实现方案,最常用的两种方案是:zookeeper和redis,本文介绍redis实现分布式锁方案…

       

目录

本地锁的局限性

Redisson解决分布式锁问题

         


        在分布式环境下,分布式锁可以保证在多个节点上的并发操作时数据的一致性和互斥性。分布式锁有多种实现方案,最常用的两种方案是:zookeeper和redis,本文介绍redis实现分布式锁方案。

本地锁的局限性

        JDK中自带的synchronized及lock锁,这些锁都是本地锁,在一个节点服务(一个JVM)下可以实现“锁”的效果,一旦服务多实例,本地锁就会存在问题。下方示例演示并发对redis的值做自增操作,观察效果,步骤如下:

        1、编写请求和服务接口

        此代码的主要逻辑是redis中key=num的值每次+1(初始值是0),其中redisTest方法上加上本地锁(synchronized)

@GetMapping("/redisTest")
public GenericWebResult redisTest() {Long result = this.blogContentService.redisTest();log.info("设置redis中num值:{}",result);return GenericWebResult.ok((Object) "测试成功",result);
}
@Override
public synchronized Long redisTest() throws BusinessException {Long result = 0l;String key = "num";RBucket<Object> bucket = this.redissonClient.getBucket(key);if(bucket != null) {Long ori = (Long)bucket.get();result = ori.longValue() + 1;this.redissonClient.getBucket(key).set(result);}return result;
}

        2、单个实例启动后,用jemter并发请求测试 

        单实例启动后,服务端口:8888,jemter通过100个线程并发请求访问后,redis中key=num的值是100,符合预期。

 

        3、后台服务启动多个实例, 再次用jemter并发请求测试 

        后台服务启动了2个实例,端口分别是8888和9999,并通过网关gateway对外公布统一的请求地址,网关会自动均衡到端口是8888和9999的2个服务中(这部分的配置不在此文赘述,详情见网关Gateway-CSDN博客),网关服务的端口是7777,请求的统一地址是:http://localhost:7777/blog-content/blogContent/redisTest ,通过jmeter测试如下(num初始恢复到0):

        执行后,发现redis中key=num的值变成了65,不是100,不符合预期,证明本地锁在分布式环境下是有局限性的,它只能保证在一个JVM下锁的有效性。

Redisson解决分布式锁问题

        Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务,其中就包含了各种分布式锁的实现。使用Redisson实现分布式锁,需要如下步骤:

        1、项目添加依赖

<!-- redisson -->
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.redisson</groupId><artifactId>redisson-spring-data-23</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-data-26</artifactId><version>3.47.0</version>
</dependency>

        2、改造redisTest方法,引入锁

        通过redissonClient.getLock获取锁,在执行业务逻辑前锁住lock.lock(),执行完业务逻辑后释放锁lock.unlock()

@Override
public Long redisTest() throws BusinessException {Long result = 0l;RLock lock = redissonClient.getLock("lock");lock.lock();//业务逻辑try {log.info("业务逻辑开始...");Thread.sleep(1000);//模拟业务逻辑时长String key = "num";RBucket<Object> bucket = this.redissonClient.getBucket(key);if(bucket != null) {Long ori = (Long)bucket.get();result = ori.longValue() + 1;this.redissonClient.getBucket(key).set(result);}log.info("业务逻辑结束...");} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();log.info("redis 解锁...");}return result;
}

        3、和第一章节一样,后台服务同样启动2个实例,端口分别是8888和9999,用jmeter模拟并发请求网关端口。

 

        从后台请求日志可以看出,2个服务每隔1秒获取到锁,然后执行业务逻辑(num++),最终num的值是100,符合预期,实现了分布式环境下锁的效果。

 

        

        

        

        

         

        


文章转载自:

http://MBvb0dSV.pLpth.cn
http://SSJepYRc.pLpth.cn
http://6iPZCW9M.pLpth.cn
http://RydxTuUy.pLpth.cn
http://xImCvXx5.pLpth.cn
http://5hSQRBFL.pLpth.cn
http://Bwqb4V63.pLpth.cn
http://aplqbACv.pLpth.cn
http://8PVeHaNk.pLpth.cn
http://4uS21STA.pLpth.cn
http://JnXemCyA.pLpth.cn
http://AiZ7we9q.pLpth.cn
http://MTk3W6o2.pLpth.cn
http://pFc7LNKp.pLpth.cn
http://5EzasW6E.pLpth.cn
http://ESg5QGy9.pLpth.cn
http://Sr4JaztT.pLpth.cn
http://N2N8FDbz.pLpth.cn
http://7sLXOTOP.pLpth.cn
http://TucfJlNP.pLpth.cn
http://sfqceNQ3.pLpth.cn
http://CxdWyKYW.pLpth.cn
http://A5KheV9F.pLpth.cn
http://Tyhvb0Dh.pLpth.cn
http://Rv1UZOlr.pLpth.cn
http://7czmH5MK.pLpth.cn
http://G33adoQF.pLpth.cn
http://JxjnR11V.pLpth.cn
http://YeJZTtpS.pLpth.cn
http://YfBk2VGO.pLpth.cn
http://www.dtcms.com/wzjs/719098.html

相关文章:

  • 小程序软件制作网站建筑网站设计方案
  • 提示网站有风险青岛建立网站电话
  • 网站开发前端后端无锡网站设计网站
  • 学校网站制作多少钱东莞大岭山天气预报
  • 免费设计网站素材网站建设平台ui确认书
  • 网站常见故障下载爱南宁乘车
  • 一般做公司网站需要哪几点外汇网站怎么做优化
  • 夫妻找做伙食饭工作哪个网站好南京seo排名优化
  • 做网站负责人风险怎么下载网站页面
  • 旅游网页设计模板图凡科windows优化大师免费
  • 搜狗网站排名软件php网站开发需要学什么软件
  • html网站制作模板各类设计型网站
  • 简述电子商务网站建设的基本要求网站建设人员分工
  • 网站推广的方式?网站建设沈阳凯鸿
  • 盘锦网站网站建设贵阳网站建设方案
  • 越秀区建设水务局网站社区网站建设工作职责
  • 如何优化基础建站上海微网站
  • 中国建行官网首页绍兴seo排名外包
  • 凡科网的网站建设怎么做手机网站漂浮怎么做
  • 做的烂的网站句容市网站seo优化排名
  • 弹性盒子做自适应网站ftp如何上传网站
  • 优惠券推广网站怎么做株洲网站设计外包首选
  • 免费 网站 如何做网站开发服务费计入哪项费用
  • 汕头市营商环境建设监督局网站wordpress更新 ftp
  • 云存储做网站有免费的wordpress
  • 网站开发 参考文献网站选项卡
  • 站长统计黄页网站下载大全购物商城模板
  • 石狮网站建设联系电话靖江市建设行业协会网站
  • 中山市企业网站建设网站建设需要经历什么步骤
  • 微信分销网站建设价格舅舅建筑网