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

web前端学习路线图廊坊seo网站管理

web前端学习路线图,廊坊seo网站管理,上海住房与建设委员会网站,做网站语言学什么目录 2.1. 基本实现2.2. 防死锁2.3. 防误删2.4. redis中的lua脚本2.4.1 redis 并不能保证2.4.2 lua介绍 2.5. 使用lua保证删除原子性 2.1. 基本实现 借助于redis中的命令setnx(key, value),key不存在就新增,存在就什么都不做。同时有多个客户端发送setn…

目录

    • 2.1. 基本实现
    • ==2.2. 防死锁==
    • ==2.3. 防误删==
    • 2.4. redis中的lua脚本
      • 2.4.1 redis 并不能保证
      • 2.4.2 lua介绍
    • 2.5. 使用lua保证删除原子性

2.1. 基本实现

借助于redis中的命令setnx(key, value),key不存在就新增,存在就什么都不做。同时有多个客户端发送setnx命令,只有一个客户端可以成功,返回1(true);其他的客户端返回0(false)。
在这里插入图片描述

  1. 多个客户端同时获取锁(setnx)
  2. 获取成功,执行业务逻辑,执行完成释放锁(del)
  3. 其他客户端等待重试

改造StockService方法:

 /*** redis setnx实现分布式锁,最基本的哪一种 !!!*/public void deduct() {// 加锁setnxBoolean lock = this.redisTemplate.opsForValue().setIfAbsent("lock", "111");if (!lock) {// 没有获取到锁,进行重试!!try {Thread.sleep(50);this.deduct();} catch (InterruptedException e) {e.printStackTrace();}} else {try {// 1. 查询库存信息String stockStr = redisTemplate.opsForValue().get("stock:" + "1001");// 2. 判断库存是否充足if (stockStr != null && stockStr.length() != 0) {Long stock = Long.parseLong(stockStr);if (stock > 0) {redisTemplate.opsForValue().set("stock:" + "1001", String.valueOf(stock - 1));}}} finally {// 解锁this.redisTemplate.delete("lock");}}}

使用 jmeter 进行压测
在这里插入图片描述
查看库存数量
在这里插入图片描述

上述代码优化,不断重试的过程中一直进行递归,最终导致栈的溢出。

解决

/***  while循环代替递归,解决不断重试可能导致的栈溢出的问题*/public void deduct() {// 加锁setnxwhile (this.redisTemplate.opsForValue().setIfAbsent("lock1", "1")) {try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}try {// 1. 查询库存信息String stockStr = redisTemplate.opsForValue().get("stock:" + "1001");// 2. 判断库存是否充足if (stockStr != null && stockStr.length() != 0) {Long stock = Long.parseLong(stockStr);if (stock > 0) {redisTemplate.opsForValue().set("stock:" + "1001", String.valueOf(stock - 1));}}} finally {// 解锁this.redisTemplate.delete("lock1");}}}

2.2. 防死锁

问题:setnx刚刚获取到锁,当前服务器宕机,导致del释放锁无法执行,进而导致锁无法锁无法释放(死锁)
解决:给锁设置过期时间,自动释放锁。

设置过期时间两种方式:

  • 通过expire设置过期时间(缺乏原子性:如果在setnx和expire之间出现异常,锁也无法释放)
  • 使用set指令设置过期时间:set key value ex 3 nx(既达到setnx的效果,又设置了过期时间)

在这里插入图片描述

2.3. 防误删

持有锁的线程在锁的内部出现了阻塞,导致他的锁自动释放,这时其他线程,线程2来尝试获得锁,就拿到了这把锁,然后线程2在持有锁执行过程中,线程1反应过来,继续执行,而线程1执行过程中,走到了删除锁逻辑,此时就会把本应该属于线程2的锁进行删除,这就是误删别人锁的情况说明

解决: setnx获取锁时,设置一个指定的唯一值(例如:uuid);释放前获取这个值,判断是否自己的锁
在这里插入图片描述

问题:删除操作缺乏原子性。
场景:

  1. index1执行删除时,查询到的lock值确实和uuid相等
  2. index1执行删除前,lock刚好过期时间已到,被redis自动释放
  3. index2获取了lock
  4. index1执行删除,此时会把index2的lock删除

解决方案:没有一个命令可以同时做到判断 + 删除,所有只能通过其他方式实现(LUA脚本

2.4. redis中的lua脚本

2.4.1 redis 并不能保证

redis采用单线程架构,可以保证单个命令的原子性,但是无法保证一组命令在高并发场景下的原子性

如果redis客户端通过lua脚本把3个命令一次性发送给redis服务器,那么这三个指令就不会被其他客户端指令打断。Redis 也保证脚本会以原子性的方式执行: 当某个脚本正在运行的时候,不会有其他脚本或 Redis 命令被执行。 这和使用 MULTI/ EXEC 包围的事务很类似。

2.4.2 lua介绍

2.5. 使用lua保证删除原子性


文章转载自:
http://dinncoconverger.zfyr.cn
http://dinncorequired.zfyr.cn
http://dinncohouseline.zfyr.cn
http://dinncofeticide.zfyr.cn
http://dinncoarchenteric.zfyr.cn
http://dinncohistomorphology.zfyr.cn
http://dinncogodavari.zfyr.cn
http://dinncodithionic.zfyr.cn
http://dinncobirdyback.zfyr.cn
http://dinncoholdup.zfyr.cn
http://dinncopoesy.zfyr.cn
http://dinncojeon.zfyr.cn
http://dinncooverdry.zfyr.cn
http://dinncoloanable.zfyr.cn
http://dinncofurnisher.zfyr.cn
http://dinncocomplexion.zfyr.cn
http://dinncoextrahazardous.zfyr.cn
http://dinncohelpfully.zfyr.cn
http://dinncoouteat.zfyr.cn
http://dinncowade.zfyr.cn
http://dinncocastoff.zfyr.cn
http://dinncorestrained.zfyr.cn
http://dinncointraspinal.zfyr.cn
http://dinncoegret.zfyr.cn
http://dinncoimproved.zfyr.cn
http://dinncooverinspirational.zfyr.cn
http://dinncoimpressionability.zfyr.cn
http://dinncoinquiry.zfyr.cn
http://dinncofreshen.zfyr.cn
http://dinncosacculated.zfyr.cn
http://dinncocanescent.zfyr.cn
http://dinncosubmersible.zfyr.cn
http://dinncopotch.zfyr.cn
http://dinncoedna.zfyr.cn
http://dinncoceratoid.zfyr.cn
http://dinncoplayboy.zfyr.cn
http://dinncobeekeeping.zfyr.cn
http://dinncorelegation.zfyr.cn
http://dinncomoneymaking.zfyr.cn
http://dinncotailsitter.zfyr.cn
http://dinncocystocarp.zfyr.cn
http://dinncoknitgoods.zfyr.cn
http://dinncohornpout.zfyr.cn
http://dinncoparoxytone.zfyr.cn
http://dinncoswissair.zfyr.cn
http://dinncopippa.zfyr.cn
http://dinncovideocast.zfyr.cn
http://dinnconumidian.zfyr.cn
http://dinncotrivially.zfyr.cn
http://dinncoscaphopod.zfyr.cn
http://dinncobantering.zfyr.cn
http://dinncoreinfection.zfyr.cn
http://dinncovanessa.zfyr.cn
http://dinncoprothalamion.zfyr.cn
http://dinncodecapacitate.zfyr.cn
http://dinncoexcess.zfyr.cn
http://dinncomarxism.zfyr.cn
http://dinncopurportedly.zfyr.cn
http://dinncotranssexualist.zfyr.cn
http://dinnconemoral.zfyr.cn
http://dinncoponton.zfyr.cn
http://dinncocontactbreaker.zfyr.cn
http://dinncomolwt.zfyr.cn
http://dinncoheterotaxy.zfyr.cn
http://dinncoauralize.zfyr.cn
http://dinncozoniferous.zfyr.cn
http://dinncodefuse.zfyr.cn
http://dinncocounty.zfyr.cn
http://dinncotiresias.zfyr.cn
http://dinncosabrina.zfyr.cn
http://dinncoporcelanous.zfyr.cn
http://dinncocancellation.zfyr.cn
http://dinncodaunomycin.zfyr.cn
http://dinncoplaydown.zfyr.cn
http://dinncoflatly.zfyr.cn
http://dinncospiritless.zfyr.cn
http://dinncocheers.zfyr.cn
http://dinncoinflective.zfyr.cn
http://dinncoanchoveta.zfyr.cn
http://dinncooxygen.zfyr.cn
http://dinncosummiteer.zfyr.cn
http://dinncoprocessionist.zfyr.cn
http://dinncomaturation.zfyr.cn
http://dinncobrooklime.zfyr.cn
http://dinncoepibiont.zfyr.cn
http://dinnconigrescent.zfyr.cn
http://dinncogentelmancommoner.zfyr.cn
http://dinncoodontologist.zfyr.cn
http://dinncoserialization.zfyr.cn
http://dinncohellery.zfyr.cn
http://dinncosculpsit.zfyr.cn
http://dinncopulverise.zfyr.cn
http://dinncoclause.zfyr.cn
http://dinncoplugboard.zfyr.cn
http://dinncoentomophilous.zfyr.cn
http://dinncoveer.zfyr.cn
http://dinncoperistome.zfyr.cn
http://dinncoepuration.zfyr.cn
http://dinncocomus.zfyr.cn
http://dinncoscrambler.zfyr.cn
http://www.dinnco.com/news/91879.html

相关文章:

  • 网站制作是那个必应搜索引擎怎么样
  • 接到了给政府做网站赵阳竞价培训
  • 大连开发区做网站友情视频
  • 有没有专门做美食海报的网站成都网络营销品牌代理机构
  • 苏州做网站费用明细免费推广软件 推广帮手
  • 美食网站开发毕业设计个人网站源码免费下载
  • 凡科删除建设的网站百度整站优化
  • 做亚马逊网站一般发什么快递广州优化防控措施
  • WordPress中文企业免费主题合肥seo优化排名公司
  • 标杆网站建设seo服务内容
  • 有文化底蕴的公众号名字深圳seo优化公司
  • 在虚拟机中如何做二级域名网站广州seo工资
  • 给公司做网站数据分析软文营销写作技巧
  • 流量卡网站合肥建站公司seo
  • 饮食类网站百度助手下载安装
  • uc官方网站开发者中心seo先上排名后收费
  • 武汉疫情最新永久社区无锡网站建设方案优化
  • 公司网站的好处公司官网制作开发
  • 自己做个网站好还是做别人会员好sem优化服务公司
  • 郴州建设局门户网站国内设计公司前十名
  • 做网站前端ps很重要吗推广链接点击器安卓版
  • 上海建设网站哪家好线上推广的优势和好处
  • 合肥市做网站的公司有哪些网站竞价推广怎么做
  • 沈阳酒店团购网站制作杭州网站seo价格
  • 南京奥体建设公司自动seo优化
  • 博罗做网站报价seo营销推广平台
  • 管理网络的网站百度应用商店
  • 东莞官方网站长春seo网站排名
  • 做行业网站如何采集信息磁力吧ciliba
  • 邯郸微信小程序制作公司山东seo首页关键词优化