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

2018做网站开发一个月工资多少开发网站需要多少钱

2018做网站开发一个月工资多少,开发网站需要多少钱,北京正规网络运营设计培训,毕业设计 建设旅游网站引言 在分布式系统中,保证数据的一致性和避免竞争条件是至关重要的。分布式锁是一种常用的机制,而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.yidumall.com/news/13062.html

相关文章:

  • 建设银行的官方网站seo教程视频论坛
  • 易企秀怎么做招聘网站超链接人力资源培训机构
  • 课程分销的网站怎么做游戏推广一个月能拿多少钱
  • 阿里巴巴上做英文网站一年多少钱搜索引擎营销推广
  • 银川住房和城乡建设局网站外链发布软件
  • 伊春北京网站建设怎么制作网页页面
  • 做缓网站好搜网惠州seo
  • ec网站域名百度seo费用
  • 小型劳务公司注册条件站长工具seo综合查询网
  • 大学生网站建设方案app开发网站
  • 微网站下载资料怎么做外贸平台有哪些比较好
  • 网站建设需要多大的空间百度一下打开
  • 用cms做网站的缺点营销方式和手段
  • wordpress 电影主题网站的优化和推广方案
  • 外贸常用网站有哪些简述搜索引擎的工作原理
  • 长沙 网站建设设计网页
  • 济宁哪里有做网站的长沙专业竞价优化首选
  • 怎么做网站鹅蛋生蚝百度登录个人中心
  • 自建网站该页无法显示台州关键词优化推荐
  • 想找人做公司网站要注意什么新闻今日要闻
  • 电商网站建设与运营方向网站开发的一般流程
  • 网站管理员怎样管理员权限设置汕头百度推广公司
  • 免费域名注册哪个网站好怎么做线上推广
  • 湖南省建设厅电话号码是多少宁波seo服务
  • 做网站用哪几个端口 比较好注册城乡规划师
  • 怎么用linux做网站服务器西安做网站
  • 做购物网站的初衷专业网站快速
  • 个人网站做短视频奶茶软文案例300字
  • 郑州英语网站建设免费的模板网站
  • 做好中心网站建设工作谷歌推广怎么样