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

画册欣赏网站wordpress链接重建

画册欣赏网站,wordpress链接重建,网站肯定被k,seo管理平台前言 自定义redis分布式锁无法自动续期#xff0c;比如#xff0c;一个锁设置了1分钟超时释放#xff0c;如果拿到这个锁的线程在一分钟内没有执行完毕#xff0c;那么这个锁就会被其他线程拿到#xff0c;可能会导致严重的线上问题#xff0c;在秒杀场景下#xff0c;…前言 自定义redis分布式锁无法自动续期比如一个锁设置了1分钟超时释放如果拿到这个锁的线程在一分钟内没有执行完毕那么这个锁就会被其他线程拿到可能会导致严重的线上问题在秒杀场景下很容易因为这个缺陷导致的超卖了。 在分布式系统中Redis作为一种高性能、低延迟的内存数据存储系统被广泛应用于各种场景。然而在复杂的环境中Redis数据可能会面临过期失效或死锁等问题这对应用程序的稳定性和安全性构成了威胁。为了解决这些问题Redisson库提供了看门狗Watch Dog策略。在分布式锁失效好会自动续期 在reddison在为定义 leaseTime情况下开启的时候默认会开启看门狗机制默认是30s 什么是看门狗策略 看门狗策略是一种自动检测并处理过期键的机制。它基于Redis的“WATCH”命令实现通过在Redisson库中创建一个监视器Watch Dog来监控Redis服务器上的指定键。 当应用程序使用Redisson库监视一个键时Watch Dog会向Redis服务器发送一个“WATCH”命令并在服务器上对该键进行监视。如果另一个客户端尝试修改被监视的键Redis服务器将返回一个错误。这个错误会被Watch Dog捕获并处理。Watch Dog会在Redisson库内部触发一个事件并将事件传递给应用程序以便应用程序可以采取相应的操作。 看门狗机制是Redission提供的一种自动延期机制这个机制使得Redission提供的分布式锁是可以自动续期的。 private long lockWatchdogTimeout 30 * 1000;看门狗机制提供的默认超时时间是30*1000毫秒也就是30秒。如果一个线程获取锁后运行程序到释放锁所花费的时间大于锁自动释放时间也就是看门狗机制提供的超时时间30s那么Redission会自动给redis中的目标锁延长超时时间。在Redission中想要启动看门狗机制那么我们就不用获取锁的时候自己定义leaseTime(锁自动释放时间)。如果自己定义了锁自动释放时间的话无论是通过lock还是tryLock方法都无法启用看门狗机制。但是如果传入的leaseTime为-1也是会开启看门狗机制的。 分布式锁是不能设置永不过期的这是为了避免在分布式的情况下一个节点获取锁之后宕机从而出现死锁的情况所以需要个分布式锁设置一个过期时间。但是这样会导致一个线程拿到锁后在锁的过期时间到达的时候程序还没运行完导致锁超时释放了那么其他线程就能获取锁进来从而出现问题。所以看门狗机制的自动续期就很好地解决了这一个问题。 源码解读 进入tryLock方法这里的tryLock(waitTime, -1, unit)有三个参数 waitTime获取锁的最大等待时间没有传默认为-1leaseTime锁自动释放的时间没有传的话默认-1unit时间的单位等待时间和锁自动释放的时间单位 public boolean tryLock(long waitTime, TimeUnit unit) throws InterruptedException {return tryLock(waitTime, -1, unit); }Overridepublic boolean tryLock(long waitTime, long leaseTime, TimeUnit unit) throws InterruptedException {long time unit.toMillis(waitTime);long current System.currentTimeMillis();long threadId Thread.currentThread().getId();Long ttl tryAcquire(waitTime, leaseTime, unit, threadId);// lock acquiredif (ttl null) {return true;}time - System.currentTimeMillis() - current;if (time 0) {acquireFailed(waitTime, unit, threadId);return false;}current System.currentTimeMillis();RFutureRedissonLockEntry subscribeFuture subscribe(threadId);if (!subscribeFuture.await(time, TimeUnit.MILLISECONDS)) {if (!subscribeFuture.cancel(false)) {subscribeFuture.onComplete((res, e) - {if (e null) {unsubscribe(subscribeFuture, threadId);}});}acquireFailed(waitTime, unit, threadId);return false;}try {time - System.currentTimeMillis() - current;if (time 0) {acquireFailed(waitTime, unit, threadId);return false;}while (true) {long currentTime System.currentTimeMillis();ttl tryAcquire(waitTime, leaseTime, unit, threadId);// lock acquiredif (ttl null) {return true;}time - System.currentTimeMillis() - currentTime;if (time 0) {acquireFailed(waitTime, unit, threadId);return false;}// waiting for messagecurrentTime System.currentTimeMillis();if (ttl 0 ttl time) {subscribeFuture.getNow().getLatch().tryAcquire(ttl, TimeUnit.MILLISECONDS);} else {subscribeFuture.getNow().getLatch().tryAcquire(time, TimeUnit.MILLISECONDS);}time - System.currentTimeMillis() - currentTime;if (time 0) {acquireFailed(waitTime, unit, threadId);return false;}}} finally {unsubscribe(subscribeFuture, threadId);} // return get(tryLockAsync(waitTime, leaseTime, unit));} 看门狗策略的优点 1.实时监控 看门狗能够实时监控Redis服务器上的键确保数据的实时性和准确性。 2.防止过期失效 通过定期检测并处理过期键看门狗策略可防止因键过期而导致的数据失效问题。 3.防止死锁 在分布式高并发的条件下如果一个线程获得了锁但还没有来得及释放锁就因为系统故障或其它原因使它无法执行释放锁的命令这会导致其它线程都无法获得锁从而造成死锁。通过使用看门狗策略应用程序可以确保所有实例都能及时地响应数据变化并避免这种情况的发生。 4.可扩展性 看门狗策略支持横向扩展能够随着系统的规模增长而保持高性能和稳定性。 watch dog缺点 redisson看门狗虽然能保证在线程没有执行完毕时锁不会释放对于秒杀这种强一致性的场景是适用的但是对于防重这种场景是不适用的在高并发情况下会导致接口性能下降。 高并发防重时如果加锁失败就快速失败这时候可以使用自定义锁或者tryLock如下 RLock lock redissonClient.getLock(Export:create: Context.get().getCorpId()); try {//尝试加锁最多等待0秒上锁以后5秒自动解锁if (lock.tryLock(0, 5, TimeUnit.SECONDS)) {//业务处理} else {Assert.isTrue(false, 排队中,请稍后重试!);} } catch (InterruptedException e) {Assert.isTrue(false, 请勿重复操作!); } finally {if (lock.isLocked()) {lock.unlock();} }Redisson 加解锁API public void test() throws Exception{RLock lock redissonClient.getLock(guodong); // 拿锁失败时会不停的重试// 具有Watch Dog 自动延期机制 默认续30s 每隔30/310 秒续到30slock.lock();// 具有Watch Dog 自动延期机制 默认续30s// 尝试拿锁10s后停止重试,返回false 具有Watch Dog 自动延期机制 默认续30sboolean res1 lock.tryLock(10, TimeUnit.SECONDS); // 没有Watch Dog // 尝试获取锁10秒如果获取不到则放弃lock.lock(10, TimeUnit.SECONDS);// 没有Watch Dog // 尝试获取锁等待100秒持有锁10秒钟boolean res2 lock.tryLock(100, 10, TimeUnit.SECONDS);Thread.sleep(40000L);lock.unlock();}lock() 方法是阻塞获取锁的方式如果当前锁被其他线程持有则当前线程会一直阻塞等待获取锁直到获取到锁或者发生超时或中断等情况才会结束等待。该方法获取到锁之后可以保证线程对共享资源的访问是互斥的适用于需要确保共享资源只能被一个线程访问的场景。Redisson 的 lock() 方法支持可重入锁和公平锁等特性可以更好地满足多线程并发访问的需求。 而 tryLock() 方法是一种非阻塞获取锁的方式在尝试获取锁时不会阻塞当前线程而是立即返回获取锁的结果如果获取成功则返回 true否则返回 false。Redisson 的 tryLock() 方法支持加锁时间限制、等待时间限制以及可重入等特性可以更好地控制获取锁的过程和等待时间避免程序出现长时间无法响应等问题。 默认情况下看门狗的续期时间是30s也可以通过修改Config.lockWatchdogTimeout来另行指定。另外Redisson 还提供了可以指定leaseTime参数的加锁方法来指定加锁的时间。超过这个时间后锁便自动解开了不会延长锁的有效期。 总结 在使用Redis实现分布式锁的时候会存在很多问题。 比如说业务逻辑处理时间自己设置的锁自动释放时间的话Redis就会按超时情况把锁释放掉而其他线程就会趁虚而入抢夺锁从而出现问题因此需要有一个续期的操作。并且如果释放锁的操作在finally完成需要判断一下当前锁是否是属于自己的锁防止释放掉其他线程的锁这样释放锁的操作就不是原子性了而这个问题很好解决使用lua脚本即可。 Redisson的出现其中的看门狗机制很好解决续期的问题它的主要步骤如下 在获取锁的时候不能指定leaseTime或者只能将leaseTime设置为-1这样才能开启看门狗机制。在tryLockInnerAsync方法里尝试获取锁如果获取锁成功调用scheduleExpirationRenewal执行看门狗机制在scheduleExpirationRenewal中比较重要的方法就是renewExpiration当线程第一次获取到锁也就是不是重入的情况那么就会调用renewExpiration方法开启看门狗机制。在renewExpiration会为当前锁添加一个延迟任务task这个延迟任务会在10s后执行执行的任务就是将锁的有效期刷新为30s这是看门狗机制的默认锁释放时间并且在任务最后还会继续递归调用renewExpiration。 也就是总的流程就是首先获取到锁这个锁30s后自动释放然后对锁设置一个延迟任务10s后执行延迟任务给锁的释放时间刷新为30s并且还为锁再设置一个相同的延迟任务10s后执行这样就达到了如果一直不释放锁程序没有执行完的话看门狗机制会每10s将锁的自动释放时间刷新为30s。 而当程序出现异常那么看门狗机制就不会继续递归调用renewExpiration这样锁会在30s后自动释放。或者在程序主动释放锁后流程如下 将锁对应的线程ID移除接着从锁中获取出延迟任务将延迟任务取消在将这把锁从EXPIRATION_RENEWAL_MAP中移除。
http://www.tj-hxxt.cn/news/230089.html

相关文章:

  • 网络营销教学网站传统企业如果建立网站
  • 建设银行不良资产处置网站wordpress 跳转插件
  • 做网站字体用什么格式网站制作留钱
  • 美丽乡村网站建设模板从化建设局网站关停
  • 做网站是要云空间吗东营定制网站建设服务
  • 温岭新站seooa连接到网站的链接怎么做
  • 合肥晚报社官方网站建立网站的基本流程
  • 公需科目在哪个网站做有做外贸的平台网站吗
  • 昆明网站建设首选互维医院的网络推广方案
  • 公司做网站哪个公司做得好Wordpress 百度云存储
  • 坦洲网站建设公司哪家好网站百度指数分析
  • 推广型网站制作公司可以做go分析的网站
  • 番禺建设网站哪个好高端网站建设的公司哪家好
  • 东莞建设网站的公司简介网络推广活动方案策划
  • 画品展现手机网站做信息安全的网站
  • vs2012建设网站做企业网站前期需要准备什么
  • 专业做生鲜的网站有专门做预算的网站没
  • pc端购物网站建站seo关键词优化排名
  • seo网站推广公司网页模板网站生成
  • 微信app下载安装免费seo手机排名软件
  • 网站关键词优化排名公司怎样推广产品
  • 网站301了不知道在哪做的微信小程序怎么做表格
  • 安卓网站开发平台搭建网站首页
  • 怎样建设网站卖农产品网络营销的特点包括什么
  • 做网站改版的网站开发使用软件有哪些
  • 建设外汇网站app推广公司怎么对接业务
  • 制作企业网站需要多少钱专业做网站哪个公司好
  • 网站开发报价文件wordpress看板猫
  • 朋友圈海报用什么网站做的网站建设如何创业
  • 企业二级域名自助建站平台东莞短视频seo优化