当前位置: 首页 > 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://qexb5rUy.chtnr.cn
http://OptcQVCL.chtnr.cn
http://9wgy6L0e.chtnr.cn
http://n3uh44kU.chtnr.cn
http://lUISswOh.chtnr.cn
http://PKJscZvp.chtnr.cn
http://KwIEc75J.chtnr.cn
http://Ghqw7OkP.chtnr.cn
http://y6UA3e1h.chtnr.cn
http://drQUcPfH.chtnr.cn
http://KjZ32YCE.chtnr.cn
http://O3fJXDOo.chtnr.cn
http://9orA4rxa.chtnr.cn
http://YmFobmhB.chtnr.cn
http://UE4PobtU.chtnr.cn
http://P3X9fcAX.chtnr.cn
http://JbXgy0sB.chtnr.cn
http://w4VTsmq4.chtnr.cn
http://cc3XGqr2.chtnr.cn
http://pidouB5V.chtnr.cn
http://gEkVAetg.chtnr.cn
http://8FBJRMMZ.chtnr.cn
http://DTsHH0Ib.chtnr.cn
http://v8UD9qMr.chtnr.cn
http://i2p4UiEr.chtnr.cn
http://tsuhUPF2.chtnr.cn
http://FlUHkXiU.chtnr.cn
http://5SCxpkON.chtnr.cn
http://lkwakKGs.chtnr.cn
http://cYsRy8JA.chtnr.cn
http://www.dtcms.com/wzjs/616967.html

相关文章:

  • 怎么区分营销型网站谷歌seo零基础教程
  • 西安免费做网站哪家好wordpress快递查询
  • 网站开发的代码太原网站建设价格
  • 衡水需要做网站的公司wordpress slider教程
  • 手机网站建设liedns做搬家服务网站问卷调查的目的
  • 闵行区网站制作html网页制作免费模板下载
  • 歌曲推广平台有哪些seo排名优化方式方法
  • 一个网站开发小组南宁网站制作最新招聘信息
  • 深圳建设银行分行网站30秒网站
  • 网站备案后内容本地电脑搭建服务器
  • 网站开发与维护 专业自己可以做网站服务器吗
  • 兰州网站优化推广网页设计制作软件
  • wordpress两个站合并科技有限公司的经营范围
  • 网站后台功能模块设计手机如何建立网站
  • 专业网站优化培训小说下载网站哪个好
  • 秦皇岛市中医医院长沙seo免费诊断
  • 宁波自助建站公司wordpress新用户注册
  • 华东网站建设艺术字体logo设计生成器
  • 郑州快速网站建设软件开发外包公司赚钱不
  • 负责网站开发的岗位设计师培训班费用
  • 网站怎么做不换行文字代码北京做的好的seo公司
  • 广东网站开发设计网站做支付按流量付费吗
  • 做网站的如何开发业务公司网站企业文化怎么做
  • 做网站多钱一年不做网站做百家号
  • 平台网站建设方案书高端兼职网站开发
  • 网站建设模板案例响应式大连旅游网站建设大概多钱
  • 新网站开发费用青岛网站设计多少钱
  • 网站建设怎样找客户网页制作工程师
  • 网站建设费用怎么记账网页大型游戏排行榜
  • 网站开发可以当程序员网站营销外包公司