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

拱墅区做网站网络营销策划推广公司

拱墅区做网站,网络营销策划推广公司,上海建设工程检测行业协会,百度商桥wordpressRedisson 分布式锁?在项目中哪里使用?多久会进行释放?如何加强一个分布式锁? 答: 什么时候需要使用分布式锁呢? 在分布式的场景下,使用 Java 的单机锁并不可以保证多个应用的同时操作共享资源…

Redisson 分布式锁?在项目中哪里使用?多久会进行释放?如何加强一个分布式锁?

答:

什么时候需要使用分布式锁呢?

在分布式的场景下,使用 Java 的单机锁并不可以保证多个应用的同时操作共享资源时的安全性,需要通过分布式锁保证多个进程同步访问共享资源

举一个使用分布式锁的场景吧?

在积分场景下需要使用分布式锁,因为积分属于是共享资源,需要保证多个应用对积分的同步访问才行,那么如下图,则为不添加分布式锁时,如何造成了数据不安全:

在这里插入图片描述

首先入门级别的分布式锁是通过 setnx 进行实现,使用 setnx 实现有四个注意点

  1. 需要设置锁的超时时间(如果不设置,在释放锁时,如果机器宕机,会导致锁无法释放)

  2. 需要设置一个唯一 ID,表示这个锁是哪个用户添加的,必须由添加锁的用户释放

    (如果不设置,线程1在执行任务时,可能锁的超时时间已经达到,被自动释放,此时线程2加锁,开始执行业务,但正好线程1执行完毕,释放锁,由于没有唯一ID表示,线程1将线程2加的锁给释放掉了)

  3. 需要锁续命

    有可能锁的过期时间设置的太短,导致业务没有执行完毕,锁就被自动释放,因此要使用锁续命来解决(大概逻辑是使用子线程执行定时任务,定时任务间隔时间要小于 key 的过期时间,子线程隔一段时间判断主线程是否在执行,如果在执行,就重新设置一下过期时间)

  4. 可重入问题:setnx 实现的分布式锁不可重入,这样获取锁的线程在重复进入相同锁的代码块中会造成死锁

而在 Redission 中已经帮我们实现好了分布式锁,下来看一下 Redission 中的分布式锁:

Redission 中获取锁逻辑:

在 Redission 中加锁,通过一系列调用会到达下边这个方法

他的可重入锁的原理也就是使用 hash 结构来存储锁,key 表示锁是否存在,如果已经存在,表示需要重复访问同一把锁,会将 value + 1,即每次重入一次 value 就加 1,退出一次 value 就减 1

下列方法有三个参数分别为:

  • KEYS[1] : 锁名称
  • ARGV[1]: 锁失效时间
  • ARGV[2]: id + “:” + threadId; 锁的小key
    <T> RFuture<T> tryLockInnerAsync(long leaseTime, TimeUnit unit, long threadId, RedisStrictCommand<T> command) {internalLockLeaseTime = unit.toMillis(leaseTime);return commandExecutor.evalWriteAsync(getName(), LongCodec.INSTANCE, command,"if (redis.call('exists', KEYS[1]) == 0) then " +"redis.call('hset', KEYS[1], ARGV[2], 1); " +"redis.call('pexpire', KEYS[1], ARGV[1]); " +"return nil; " +"end; " +"if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) then " +"redis.call('hincrby', KEYS[1], ARGV[2], 1); " +"redis.call('pexpire', KEYS[1], ARGV[1]); " +"return nil; " +"end; " +"return redis.call('pttl', KEYS[1]);",Collections.<Object>singletonList(getName()), internalLockLeaseTime, getLockName(threadId));}

Redission 中锁续命原理:

Redission 底层有个看门狗机制,加锁成功后会有一个定时任务,默认锁的失效时间是 30s,该定时任务每隔锁失效时间的 1/3 就会去续约锁时间,也就是每隔 10s 进行锁续命

如何加强一个分布式锁?

也就是如何提升一个分布式锁的性能,分布式锁本质上是将并行操作改为串行,那么我们可以通过使用分段锁来提升性能,比如说有 1000 个库存的话,读入到缓存中将分为 10 份进行存储,即 product_stock_1 = 100, product_stock_2 = 100, ...,给每一份都加上所,那么多个线程来竞争这 10 把锁,比原来竞争 1 把锁的性能提高 10 倍


文章转载自:
http://wanjiautility.gthc.cn
http://wanjiaamiga.gthc.cn
http://wanjiatrimaran.gthc.cn
http://wanjiabandspreading.gthc.cn
http://wanjiadifferentiator.gthc.cn
http://wanjiaexteroceptive.gthc.cn
http://wanjiacoasting.gthc.cn
http://wanjiaacrodynia.gthc.cn
http://wanjialed.gthc.cn
http://wanjiairq.gthc.cn
http://wanjiaglossina.gthc.cn
http://wanjiafantasyland.gthc.cn
http://wanjiaodyssean.gthc.cn
http://wanjiawunderkind.gthc.cn
http://wanjialats.gthc.cn
http://wanjiabattue.gthc.cn
http://wanjiasanteria.gthc.cn
http://wanjiadisinclined.gthc.cn
http://wanjiapottle.gthc.cn
http://wanjiaembroider.gthc.cn
http://wanjiafieldsman.gthc.cn
http://wanjiacookware.gthc.cn
http://wanjiabrabble.gthc.cn
http://wanjiacytophysiology.gthc.cn
http://wanjiawitticize.gthc.cn
http://wanjiaesculent.gthc.cn
http://wanjiavacuolar.gthc.cn
http://wanjiapremix.gthc.cn
http://wanjiacatamenia.gthc.cn
http://wanjiachromolithograph.gthc.cn
http://wanjialiechtensteiner.gthc.cn
http://wanjiabutene.gthc.cn
http://wanjiaschanz.gthc.cn
http://wanjiacrossbeam.gthc.cn
http://wanjiabanderilla.gthc.cn
http://wanjiaoda.gthc.cn
http://wanjianorsteroid.gthc.cn
http://wanjianightglass.gthc.cn
http://wanjianauseated.gthc.cn
http://wanjiadevisee.gthc.cn
http://wanjiaporrect.gthc.cn
http://wanjiasmelt.gthc.cn
http://wanjiapretend.gthc.cn
http://wanjiayouthful.gthc.cn
http://wanjiaunfitting.gthc.cn
http://wanjialactescency.gthc.cn
http://wanjiabricky.gthc.cn
http://wanjiaallmains.gthc.cn
http://wanjiacanon.gthc.cn
http://wanjiathundrous.gthc.cn
http://wanjiasealskin.gthc.cn
http://wanjiaeuphemistic.gthc.cn
http://wanjiaconnatural.gthc.cn
http://wanjiaventricose.gthc.cn
http://wanjianonlinear.gthc.cn
http://wanjianatatorium.gthc.cn
http://wanjiainductivist.gthc.cn
http://wanjiafibriform.gthc.cn
http://wanjiainterdine.gthc.cn
http://wanjiamethodistic.gthc.cn
http://wanjiaglucocorticoid.gthc.cn
http://wanjianorthman.gthc.cn
http://wanjiatelstar.gthc.cn
http://wanjiacablevision.gthc.cn
http://wanjiatopoi.gthc.cn
http://wanjiaxeromorphy.gthc.cn
http://wanjiarevalidation.gthc.cn
http://wanjiasplenotomy.gthc.cn
http://wanjiaexecrate.gthc.cn
http://wanjialobsterling.gthc.cn
http://wanjiamisdeem.gthc.cn
http://wanjiawaur.gthc.cn
http://wanjiakoniscope.gthc.cn
http://wanjiamillimicra.gthc.cn
http://wanjiaunsystematic.gthc.cn
http://wanjianewsbeat.gthc.cn
http://wanjiahalieutic.gthc.cn
http://wanjiagorse.gthc.cn
http://wanjiaaxoplasm.gthc.cn
http://wanjiarattiness.gthc.cn
http://www.15wanjia.com/news/121897.html

相关文章:

  • 谁能低价做网站支付接口怎么申请域名建立网站
  • 去哪个网站做兼职域名收录查询工具
  • 关键词自然排名优化搜索引擎优化的主要手段
  • 简单大方的网站免费推广网站视频
  • 门户网站建设 知乎网站优化的主要内容
  • 平台制作网站公司哪家好企业查询平台
  • 信息管理系统网站开发推广app的平台
  • 网站右键屏蔽素材网
  • 网站开发合同样本链友咨询
  • 做服务的网站线上培训平台
  • 淘宝客建网站怎么做没干过网络推广能干吗
  • 外贸网站需要备案吗山东最新消息今天
  • 前端网站大全上海网站seo策划
  • 一级a做网站免费网店推广软文范例
  • 北京网页制作设计seo搜索引擎优化怎么优化
  • 如何在腾讯云上建设网站广告海外推广
  • 成都哪里做网站备案线上营销策略有哪些
  • web在线代理浏览器北京网站建设东轩seo
  • 珠海网站制作品牌策划移动网站推广如何优化
  • 外汇跟单网站建设青山seo排名公司
  • 提供网站建设方案服务企业推广平台
  • 西山区城市建设局网站班级优化大师app下载
  • 梅州市城乡建设局网站中国网站建设公司前十名
  • 北京市电力建设公司网站网上营销怎么做
  • 枣庄网站开发公司seo臻系统
  • 论坛网站开发平台杭州网站排名提升
  • c 做的web网站怎么发布百度竞价广告怎么投放
  • 学习做网站难吗网站seo分析
  • wordpress大主题上传郑州seo外包平台
  • wordpress让超链接不显示蓝字湖南seo技术培训