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

企业网站开源代码官方网页qq登陆

企业网站开源代码,官方网页qq登陆,手机开发网站教程,人才网站开发Redisson 分布式锁的最佳实践 第一、添加依赖第二、添加redisson配置类第三、添加测试类测试结果扩展知识redisson锁中lock方法和tryLock方法有什么区别锁续约 注意事项 引言 在现代分布式系统中#xff0c;处理并发问题是至关重要的。分布式锁是解决这类问题的关键工具之一。… Redisson 分布式锁的最佳实践 第一、添加依赖第二、添加redisson配置类第三、添加测试类测试结果扩展知识redisson锁中lock方法和tryLock方法有什么区别锁续约 注意事项 引言 在现代分布式系统中处理并发问题是至关重要的。分布式锁是解决这类问题的关键工具之一。本文将介绍如何使用 Redisson一个强大的 Redis 客户端库来实现高性能、高可用性的分布式锁。 基本概念 分布式锁是多个进程或线程之间协调操作的一种机制。它通常包括三个基本操作加锁、持有锁、释放锁。Redisson 提供了简单而强大的接口来管理这些操作。 Redisson 分布式锁的使用方法 第一、添加依赖 !-- redisson分布式锁 -- dependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.15.5/version /dependency第二、添加redisson配置类 package com.kingmouse.lock;import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** Created with IntelliJ IDEA** author kingMouse* date 2023/11/7 09:50* Description: redisson配置类 单机和集群自选*/Configuration public class RedissonConfig {/*** 单机模式* return RedissonClient*/Bean(destroyMethod shutdown)public RedissonClient redissonSingle() {// 1.创建配置Config config new Config();// 单机模式config.useSingleServer()// 设置地址.setAddress(redis://127.0.0.1:6379)// 设置连接数.setConnectionPoolSize(10);return Redisson.create(config);}/*** 单机模式* return RedissonClient*/// Bean(destroyMethod shutdown) // public RedissonClient redissonCluster() { // // 1.创建配置 // Config config new Config(); // // 集群模式-带密码 // config.useClusterServers() // .addNodeAddress(127.0.0.1:7004, 127.0.0.1:7001) // .setPassword(12356) // // 设置master节点最小连接数 // .setMasterConnectionMinimumIdleSize(10) // // 设置slave节点最小连接数 // .setSlaveConnectionMinimumIdleSize(10); // return Redisson.create(config); // }第三、添加测试类 package com.kingmouse.lock;import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;import java.util.concurrent.TimeUnit;/*** Created with IntelliJ IDEA** author kingMouse* date 2023/11/5 09:54* Description:*/Slf4j RunWith(SpringRunner.class) SpringBootTest public class RedissonLockTest {Autowiredprivate RedissonClient redissonClient;/*** 阻塞式*/Testpublic void testRedissonBlock() {// 设置锁的名字同一个名字为同一把锁,不同名字之间互不干扰String lockKey kingmouse-001;// 获取锁对象RLock lock redissonClient.getLock(lockKey);// 加锁,尝试获取锁5秒后获取不到则直接放弃lock.lock(5, TimeUnit.SECONDS);// 实际业务处理try {System.out.println(阻塞式--加锁成功线程 ID Thread.currentThread().getId());} catch (Exception e) {log.error(业务处理异常{}, e.getMessage());} finally {// 解锁lock.unlock();System.out.println(阻塞式--解锁成功线程 ID Thread.currentThread().getId());}}Testpublic void testRedissonNonBlock() throws Exception {// 设置锁的名字同一个名字为同一把锁,不同名字之间互不干扰String lockKey kingmouse-002;// 获取锁对象RLock lock redissonClient.getLock(lockKey);// 尝试获取锁最长等待5秒持有锁最长30秒boolean isLock lock.tryLock(5, 30, TimeUnit.SECONDS);if (isLock) {// 实际业务处理try {System.out.println(非阻塞式--获取锁成功线程 ID Thread.currentThread().getId());} catch (Exception e) {log.error(业务处理异常{}, e.getMessage());} finally {// 解锁lock.unlock();System.out.println(非阻塞式--解锁成功线程 ID Thread.currentThread().getId());}}}}测试结果 阻塞式--加锁成功线程 ID1 阻塞式--解锁成功线程 ID1非阻塞式--获取锁成功线程 ID1 非阻塞式--解锁成功线程 ID1扩展知识 redisson锁中lock方法和tryLock方法有什么区别 在 Redisson 中lock 方法和 tryLock 方法都是用来获取分布式锁的但它们在获取锁的方式和行为上有一些区别 在 Redisson 中lock 方法和 tryLock 方法都是用来获取分布式锁的但它们在获取锁的方式和行为上有一些区别 lock 方法: lock 方法是阻塞的即如果获取锁失败调用该方法的线程会被阻塞直到获取到锁为止。如果在获取锁时发生网络分区或其他异常会一直重试获取锁直到获取成功或者达到设置的超时时间为止。使用 lock 方法时如果获取锁成功后需要手动调用 unlock 方法来释放锁。 例如 RLock lock redisson.getLock(myLock);lock.lock();try {// 执行业务逻辑} finally {lock.unlock();}tryLock 方法: tryLock 方法是非阻塞的即如果获取锁失败方法会立即返回不会阻塞当前线程。tryLock 方法可以设置超时时间在指定的超时时间内尝试获取锁如果超时仍未获取到锁则返回 false。使用 tryLock 方法时获取锁成功后不需要手动释放锁因为锁会在超时时间后自动释放。(建议使用完自动释放锁) 例如 RLock lock redisson.getLock(myLock);boolean isLocked lock.tryLock(10, TimeUnit.SECONDS);if (isLocked) {try {// 执行业务逻辑} finally {lock.unlock();}} else {// 获取锁失败的处理逻辑}总结来说lock 方法是阻塞的会一直尝试获取锁直到成功而 tryLock 方法是非阻塞的在指定的超时时间内尝试获取锁如果超时则返回失败。选择使用哪种方法取决于你的业务需求以及是否能够容忍等待获取锁的阻塞时间。 锁续约 使用看门狗Watchdog可以实现锁的自动续约 String permitId lock.acquire(10, TimeUnit.SECONDS); RScheduledExecutorService executorService redisson.getExecutorService(myExecutorService); executorService.schedulePermitExpiration(permitId, 5, TimeUnit.SECONDS);在这个例子中我们使用 schedulePermitExpiration 方法每隔5秒续约一次锁的持有时间。 注意事项 在使用分布式锁时需要注意以下几点 合理设置锁的持有时间不要将锁的持有时间设置得过长以免影响系统的并发性能。根据实际业务需求选择一个合适的持有时间。 使用看门狗进行续约在需要锁的持有时间较长的情况下使用看门狗可以确保锁不会在持有时间内过期避免了手动续约的繁琐操作。 异常处理在加锁、续约、释放锁的过程中需要考虑可能出现的异常情况并进行适当的处理以确保锁能够被正确释放避免死锁等问题。 实际应用场景 在电商系统中分布式锁可以用来避免商品超卖问题。在任务调度系统中可以确保同一个任务在同一时刻只被一个节点执行避免任务重复执行等问题。 总结 Redisson 提供了简单而强大的分布式锁解决方案通过合理设置锁的持有时间和使用看门狗进行续约可以确保系统在高并发环境下的稳定性和可靠性。在实际应用中开发人员可以根据业务需求选择合适的锁策略并进行必要的异常处理以实现分布式系统的高效运行。
http://www.zqtcl.cn/news/550882/

相关文章:

  • 鹤岗做网站企业建立网站主要包括那些流程
  • 如何进网站出口外贸是做什么的
  • 网站制作北京网站建设公司哪家好一个人 建设网站
  • 百度网站是什么阿里云免费网站建设
  • 网站建设平台源码攻击网站步骤
  • 注册了网站之后怎么设计深圳开发app
  • 国外网站搭建平台移动互联网公司
  • 做网络私活的网站网站开发的人
  • 数据分析网站开发四川手机网站设计方案
  • 什么是网络营销的方法莱州网站建设关键字排名优化网络托管微信代运营
  • 雅虎网站收录提交入口怎么看网站谁做的
  • 青浦专业做网站免费网站软件大全
  • joomla 网站图标六安市城市建设档案馆网站
  • 郑州 公司网站制作win10 wordpress安装
  • html5网站有哪些网站建设部分费用会计科目
  • 网站域名备案 更改吗深圳新站优化
  • 房产网站门户系统免费网站免费无遮挡
  • 用国外网站 图片做自媒体seo诊断a5
  • 广州市南沙建设局网站优改网logo设计
  • 网站建设亿玛酷知名公司网站首页如何做
  • 教育网站 php网络服务公司
  • net域名做网站怎么样建站公司 转型经验
  • 赣州网站建设哪家公司好上海市建设安全协会网站
  • 网站排名优化软件有哪些西宁网站建设官网
  • 支付宝手机网站签约迪庆公司网站开发方法
  • 唐山网站关键词优化网站开发公司推荐
  • 福建响应式网站制作市工商局网站建设情况
  • 深圳网站运营托管罗伯特清崎说的网络营销是什么
  • 太仓市质监站网址百度关键字推广费用
  • 为您打造高端品牌网站pageadmin wordpress