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

2018做网站开发一个月工资多少seo快排

2018做网站开发一个月工资多少,seo快排,做淘宝客网站制作教程视频教程,湖北最专业的公司网站建设平台引言 在分布式系统中,保证数据的一致性和避免竞争条件是至关重要的。分布式锁是一种常用的机制,而Redis作为一款高性能的内存数据库,提供了简单而强大的分布式锁方案。本文将深入探讨如何利用Redis高并发分布式锁来解决分布式系统中的并发控…

引言

在分布式系统中,保证数据的一致性和避免竞争条件是至关重要的。分布式锁是一种常用的机制,而Redis作为一款高性能的内存数据库,提供了简单而强大的分布式锁方案。本文将深入探讨如何利用Redis高并发分布式锁来解决分布式系统中的并发控制问题,并提供实战案例。

正常库存扣减代码

public void deductStock(){int stock = Integer.parseInt(redisTemplate.opsForValue().get("stock"));if(stock>0){stock = stock -1 ;redisTemplate.opsForValue().set("stock",stock+"");System.out.println("扣减成功,剩余库存:"+stock);}else {System.out.println("扣减失败,库存不足");}
}
//弊端:两个线程同时执行读取stock为50,然后各自-1 修改为49,实际应该50-2=48

代码调整后

public void deductStock(){synchronized (this){int stock = Integer.parseInt(redisTemplate.opsForValue().get("stock"));if(stock>0){stock = stock -1 ;redisTemplate.opsForValue().set("stock",stock+"");System.out.println("扣减成功,剩余库存:"+stock);}else {System.out.println("扣减失败,库存不足");}}
}
//弊端:适用于单体项目,如果该项目被部署两台服务器,两台服务器同时访问获取stock为50,然后各自-1 修改为49,实际应该50-2=48 也会存在上述问题,因为synchronized只能在当前项目下生效

redis的一个简单的分布式锁

public void deductStock(){String lockKey = "lockKey";try {Boolean result = redisTemplate.opsForValue().setIfAbsent("lockKey", "nuoyi",10, TimeUnit.SECONDS);if(!result){System.out.println("....");return ;}int stock = Integer.parseInt(redisTemplate.opsForValue().get("stock"));if(stock>0){stock = stock -1 ;redisTemplate.opsForValue().set("stock",stock+"");System.out.println("扣减成功,剩余库存:"+stock);}else {System.out.println("扣减失败,库存不足");}}catch (Exception e){e.printStackTrace();}finally {redisTemplate.delete("lockKey");}
}
//弊端:适用于访问量不高的系统  如果访问量非常的大,第一个a请求获取到锁 ,设置过期10s,执行业务需要15s,a业务执行10s后锁自动过期被第二个请求b拿到并执行业务,当b业务执行到第5s时,b的锁被a的请求给释放了,如此高并发循环,导致锁失效

优化上述redis的分布式锁解决不是自己的锁不释放
 

public void deductStock(){String lockKey = "lockKey";String clientId = UUID.randomUUID().toString();try {Boolean result = redisTemplate.opsForValue().setIfAbsent("lockKey", clientId,10, TimeUnit.SECONDS);if(!result){System.out.println("....");return ;}int stock = Integer.parseInt(redisTemplate.opsForValue().get("stock"));if(stock>0){stock = stock -1 ;redisTemplate.opsForValue().set("stock",stock+"");System.out.println("扣减成功,剩余库存:"+stock);}else {System.out.println("扣减失败,库存不足");}}catch (Exception e){e.printStackTrace();}finally {//不是自己的锁不删除if(clientId.equals(redisTemplate.opsForValue().get(lockKey))){redisTemplate.delete("lockKey");}}
}
//不是自己的锁不删除,但是这个只是解决了a请求删除b请求的锁,如果a请求15秒锁第十秒过期了,b请求就进来了还是会有问题,解决方案:给锁续命

 Redisson代码
 

private final Redisson redisson;public void deductStock(){String lockKey = "lockKey";RLock redissonLock = redisson.getLock(lockKey);//获取锁try {redissonLock.lock();//加锁及锁续命   默认锁失效30s  守护线程每10s续命一次int stock = Integer.parseInt(redisTemplate.opsForValue().get("stock"));if(stock>0){stock = stock -1 ;redisTemplate.opsForValue().set("stock",stock+"");System.out.println("扣减成功,剩余库存:"+stock);}else {System.out.println("扣减失败,库存不足");}}catch (Exception e){e.printStackTrace();}finally {redissonLock.unlock();//释放锁}
}
//三行代码即可满足获取锁、锁续命、释放锁,完美解决上述redis的释放锁及锁续命问题  redisson的底层还是redis,使用了大量的lua脚本,lua脚本支持原子性

redisson配置
 

@Bean
public Redisson redisson(){Config config = new Config();//useSingleServer 单机版config.useSingleServer().setAddress("redis://"+instance.getRedisHost()+":"+instance.getRedisPort()).setDatabase(instance.getRedisDataBase());return (Redisson)Redisson.create(config);
}


 

lua脚本语言:

  • 减少网络开销(批量操作)

  • 原子性

  • 替代redis的事务
     

为什么redis不常使用lua?

因为Redis是个单线程,如果lua有耗时运算或循环,Redis则阻塞,不会管其他的操作

通过学习本文,读者将深入了解Redis分布式锁的原理和实践应用。分布式锁在构建高并发、分布式系统中发挥着关键作用,正确使用和理解分布式锁是确保系统稳定性和可靠性的重要一环。希望本文能为读者提供有益的指导和实战经验。

http://www.khdw.cn/news/21432.html

相关文章:

  • 如何为公司建立网站企业网站如何优化
  • 网站开发任务清单网站制作app
  • 东莞b2b网站开发公司关键词seo深圳
  • 泸州北京网站建设页面优化的方法有哪些
  • 怎么给网站做第三方app网络推广运营优化
  • 专业制作证件网站最新国际军事动态
  • 胶州网站建设 网络推广济南网站建设制作
  • b2b网站做水处理哪个好德芙巧克力软文推广
  • 网站主机名是什么做电商需要学哪些基础
  • 单位网站制作三亚网络推广
  • 科技网站建设 长沙怎么去推广自己的店铺
  • 唐山哪家做网站好百度宣传广告要多少钱
  • 用vs做音乐网站百度第三季度财报2022
  • 在微信上怎么卖自己的产品aso优化报价
  • 学网站开发跟那个专业最相近seo是哪个英文的缩写
  • 做网站用的什么服务器南京今日新闻头条
  • 在百度上免费做网站页面seo网站外包公司
  • 象山县城乡和住房建设局网站幽默软文广告经典案例
  • 最专业网站建设哪家好中国搜索引擎排行榜
  • 淮安哪里有做网站的人无锡网站seo顾问
  • 局域网网站域名怎么做今日最新闻
  • 漳州 做网站百度招聘官网首页
  • 查域名被墙沈阳seo按天计费
  • 做网站有er图seoshanghai net
  • 网页设计网站模板素材在哪里推广比较好
  • 永久免费网站百度下载并安装
  • 珠海网站建设有限公司网络营销就业前景和薪水
  • 外汇跟单社区网站开发中小企业网站
  • 做网站找什么公司好合肥优化
  • 新安商品混泥土网站建设今日热搜排行第一名