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

上海营销型网站建设平台百度一下百度搜索百度一下

上海营销型网站建设平台,百度一下百度搜索百度一下,网站建设一百互联,腰椎间盘突出压迫神经腿疼怎么治1. Redisson简介 Redisson是一个基于Redis的Java客户端库,提供了丰富的分布式对象和服务(如分布式锁、信号量、Map等)。其核心优势在于​​简化分布式锁的实现​​,并解决了原生Redis分布式锁的常见问题(如死锁、误删…

1. Redisson简介

Redisson是一个基于Redis的Java客户端库,提供了丰富的分布式对象和服务(如分布式锁、信号量、Map等)。其核心优势在于​​简化分布式锁的实现​​,并解决了原生Redis分布式锁的常见问题(如死锁、误删锁等)。


2. Redisson分布式锁核心特性

2.1 锁类型

  • ​可重入锁(RLock)​​:同一线程可重复获取同一把锁。
  • ​公平锁(FairLock)​​:按请求顺序分配锁,避免饥饿现象。
  • ​联锁(MultiLock)​​:一次性锁定多个资源。
  • ​红锁(RedLock)​​:基于多Redis实例的高可用锁。

可重入锁(RLock)

可重入锁是Redisson最基础的锁类型,允许同一线程多次获取同一把锁而不会造成死锁。其核心原理是:

  • ​数据结构​​:使用Redis的Hash结构存储锁信息,key为锁名称,field为线程标识(UUID+threadId),value为重入次数
  • ​重入机制​​:当线程首次获取锁时,计数器设为1;同一线程再次获取时计数器递增,释放时递减,直到计数器归零才真正释放锁
  • ​Lua脚本保证原子性​​:加锁和解锁操作都通过Lua脚本实现,确保操作的原子性
// 获取可重入锁示例
RLock lock = redisson.getLock("myLock");
lock.lock();  // 第一次获取锁
try {lock.lock();  // 同一线程再次获取锁(重入)// 执行业务逻辑
} finally {lock.unlock();  // 释放锁(计数器减1)lock.unlock();  // 完全释放锁(计数器归零)
}

公平锁(FairLock)

公平锁按照请求顺序分配锁资源,解决线程饥饿问题:

  • ​排队机制​​:使用Redis的List结构实现等待队列(redisson_lock_queue:{lockName}),ZSet结构记录超时时间(redisson_lock_timeout:{lockName})
  • ​公平获取​​:新线程获取锁时,必须检查自己是否是队列头部,只有队首线程才能获取锁
  • ​超时清理​​:定期清理队列中超时的线程请求,避免无效等待
// 公平锁使用示例
RLock fairLock = redisson.getFairLock("fairLock");
fairLock.lock();
try {// 公平执行业务逻辑
} finally {fairLock.unlock();
}

联锁(MultiLock)

联锁用于同时锁定多个资源:

  • ​原子性操作​​:将多个RLock组合成一个锁,所有锁必须全部获取成功才算成功
  • ​严格互斥​​:默认要求所有锁都必须成功获取(failedLocksLimit=0)
  • ​适用场景​​:如订单系统中需要同时锁定多个商品库存的场景
// 联锁使用示例
RLock lock1 = redisson.getLock("lock1");
RLock lock2 = redisson.getLock("lock2");
RLock lock3 = redisson.getLock("lock3");RedissonMultiLock multiLock = new RedissonMultiLock(lock1, lock2, lock3);
multiLock.lock();
try {// 同时操作多个受保护资源
} finally {multiLock.unlock();
}

红锁(RedLock)

红锁是基于多Redis实例的高可用锁:

  • ​多数派原则​​:在N个独立Redis节点上获取锁,至少成功(N/2 +1)个才算获取成功
  • ​容错机制​​:即使部分节点故障,只要多数节点正常就能保证锁可用
  • ​解决主从问题​​:避免主从切换导致的锁失效问题
// 红锁使用示例
RLock lock1 = redisson1.getLock("lock1");
RLock lock2 = redisson2.getLock("lock2");
RLock lock3 = redisson3.getLock("lock3");RedissonRedLock redLock = new RedissonRedLock(lock1, lock2, lock3);
redLock.lock();
try {// 执行高可用要求的业务逻辑
} finally {redLock.unlock();
}


2.2 关键机制

  • ​看门狗自动续期​​:默认30秒检查一次,若业务未完成则延长锁过期时间。
  • ​锁超时释放​​:避免死锁,支持手动设置leaseTime
  • ​非阻塞尝试​​:通过tryLock(0, ...)实现立即返回。

3. 代码示例

3.1 基础锁使用

// 1. 获取RedissonClient实例(需提前配置Redis连接)
RedissonClient redisson = Redisson.create(config);// 2. 获取锁对象(锁键为"myLock")
RLock lock = redisson.getLock("myLock");try {// 3. 尝试获取锁,waitTime=0表示不重试,leaseTime=10秒表示锁自动释放时间boolean isLocked = lock.tryLock(0, 10, TimeUnit.SECONDS);if (isLocked) {// 4. 执行业务逻辑System.out.println("锁获取成功,执行业务...");} else {System.out.println("锁获取失败,直接返回");}
} catch (InterruptedException e) {Thread.currentThread().interrupt();System.out.println("线程被中断");
} finally {// 5. 释放锁(需判断当前线程是否持有锁)if (lock.isLocked() && lock.isHeldByCurrentThread()) {lock.unlock();}
}

3.2 注解式锁(Spring集成)

@Service
public class InventoryService {private int stock = 100;// 使用@Lock注解声明分布式锁(锁键为"decreaseStockLock")@Lock(name = "decreaseStockLock")public void decreaseStock() {if (stock > 0) {stock--;System.out.println("库存扣减成功,剩余: " + stock);}}
}

4. 最佳实践

  1. ​避免锁过期​​:若业务耗时不确定,建议不设置leaseTime(启用看门狗)。
  2. ​防误删锁​​:在unlock()前校验锁持有者(isHeldByCurrentThread())。
  3. ​非阻塞场景​​:使用tryLock(0, ...)快速失败。

5.对比总结

特性可重入锁公平锁联锁红锁
核心特点同一线程可重复获取按请求顺序分配同时锁定多个资源多节点高可用
数据结构Hash结构Hash+List+ZSet多个RLock组合多个独立节点锁
适用场景一般并发控制避免线程饥饿多资源原子操作高可用要求场景
性能影响中等(需维护队列)高(需获取所有锁)高(多节点通信)

参加:腾讯元宝

 


文章转载自:

http://10OXvwYc.Ljyqn.cn
http://x4bazVN5.Ljyqn.cn
http://ALoo3nCI.Ljyqn.cn
http://vo8RNFof.Ljyqn.cn
http://bwDMpBzK.Ljyqn.cn
http://wp1tbCw4.Ljyqn.cn
http://DfjFsHZu.Ljyqn.cn
http://Ph3W3VuZ.Ljyqn.cn
http://MYoIm8Tp.Ljyqn.cn
http://QjVgdutr.Ljyqn.cn
http://r4rpRtzR.Ljyqn.cn
http://SFQb4kBc.Ljyqn.cn
http://XU4sLKSh.Ljyqn.cn
http://Y9QWlToH.Ljyqn.cn
http://AuZGOD5H.Ljyqn.cn
http://qvC2e1uE.Ljyqn.cn
http://pzP2iKYV.Ljyqn.cn
http://ZSokVg8J.Ljyqn.cn
http://iWLbg6Jf.Ljyqn.cn
http://7rg1SlAI.Ljyqn.cn
http://KtUPnXld.Ljyqn.cn
http://2jdfcFg6.Ljyqn.cn
http://krLiiNNk.Ljyqn.cn
http://OwUKdlnF.Ljyqn.cn
http://WvDBaTio.Ljyqn.cn
http://nULPll78.Ljyqn.cn
http://mewmTXz5.Ljyqn.cn
http://z37d8Kmv.Ljyqn.cn
http://Gcx3k5pP.Ljyqn.cn
http://ZeVapT7b.Ljyqn.cn
http://www.dtcms.com/wzjs/690904.html

相关文章:

  • 快速建站公司地址河南省新闻联播视频
  • 深圳做手机商城网站wordpress登录qq微信登录界面
  • 做类似猪八戒网的网站网站群建设进度
  • 英国免费做网站为企业策划一次网络营销活动
  • 南三环做网站的公司跳转到另一个网站怎么做
  • 房产网站怎么建设重庆新华网
  • 虚拟币交易网站开发网络营销该如何发展
  • 桥东网站建设要想提高网站排名应该如何做
  • 色系网站哪里有老网站用新域名
  • 医院门户网站开发博客可以做网站收录用的吗
  • 网站的维护工作内容wordpress如何设置cdn
  • 深圳专业企业网站建设seo网站架构设计
  • 烟台装修公司网站建设wordpress主题添加设置页面
  • pc访问手机网站跳转企业网站建设找智恒网络
  • html网站开发相关书籍群晖 wordpress
  • 最新网站源码下载营销推广运营
  • 健身房网站模板设计公司网站建设费用
  • 网站建设协议需要注意的问题最专业的营销网站建设公司排名
  • 制作做的网站如何上传网上用自己的网站做淘客
  • 沈阳网站设计培训班营销型网站案例 注册公司
  • 做课题的网站有多少是备案的优化营商环境个人心得
  • 网站建设与维护大作业html5视频网站开发
  • 郑州网络推广公司排名益阳网站seo
  • 重庆建筑网络平台网络优化seo薪酬
  • 电子商务网站建设的书酒店预定类网站建设
  • 佛山提供网站设计方案公司本地的上海网站建设公
  • 外贸网站推广 上海wordpress 全局广告
  • 大鹏新区住房建设局网站品牌网站要这么做
  • aspnet网站开发实例教程品牌推广理论
  • 网站做优化应该具备什么企业服务官网