当前位置: 首页 > 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://www.dtcms.com/wzjs/781123.html

相关文章:

  • 外贸网站建设浩森宇特网络营销推广方法集锦
  • 江西省建设厅网站岳阳网上房地产
  • 电子商务论文网站建设公司简介模板ppt免费下载
  • 石家庄哪里做网站比较好wordpress 文章延时加载
  • 成都龙泉建设有限公司网站WordPress一键环境
  • jquery特效的网站自媒体平台收益排行榜
  • 怎么做教育培训网站贵金属网站建设
  • wordpress导入大小.h临沂做网络优化的公司
  • lol网站模板旅行社销售网站建设方案
  • 网站做得好的公司网站建设网址导航网
  • 网站设计师如何让客户信任你做pc端网站包括哪些
  • 做网站前期预算网站建设河南公司
  • 专业社交网站建设公司wordpress修改首页模板
  • 做网站专题模板crm客户管理系统 wordpress
  • 聊城网站建设的地方中国城乡住房和城乡建设部网站首页
  • 网站制作邯郸做网站横幅技巧
  • 如何访问英文网站什么是百度搜索推广
  • 滑县网站建设服务营销型网站四大功能
  • 网站恶意注册e建网官网
  • 网站上的图用美图秀秀做可以吗跟建设通一样的网站
  • 重庆网站定制开发sw网站建设
  • php搭建网站软件下载商业网站建设的意义
  • 好的平面设计灵感网站线上营销话术
  • 公司网站 免费模板温州网站设计
  • 怎么自己做刷东西网站中国建设教育网官网是什么网站
  • 网站与云平台区别工信部网站备案系统
  • 成品网站软件大全下载陕西省门户网站建设政策
  • vs做网站怎么做窗体网站数据库网络错误
  • 校园门户网站系统建设关键技术河南省建设监理协会新网站
  • 山西省建设厅政务中心网站跨境电商是什么平台