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

Redisson 分布式锁

  • Redis是基础客户端库,可用于执行基本操作。

  • Redisson是基于Redis的Java客户端,提供高级功能如分布式锁、分布式集合和分布式对象。

  • Redisson提供更友好的API,支持异步和响应式编程,提供内置线程安全和失败重试机制。

实现步骤:

 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.12.0</version></dependency>

@Configuration
public class MyRedissonConfig {@Beanpublic RedissonClient redisson(){Config config = new Config();config.useSingleServer().setAddress("redis://192.168.127.129:6379");RedissonClient redissonClient = Redisson.create(config);return redissonClient;}
}

通过导入坐标和配置,注入RedissonClient对象之后,就可以通过API操作

如:获取可重入锁

@ResponseBody  //因为返回的是json数据@GetMapping("/hello")public String hello(){//获取一把锁  只要锁的名字一样就是通一把锁   是一个可重入的锁RLock myLock = redissonClient.getLock("myLock");/**** 默认都是30s* 加锁   阻塞式等待  锁的自动续期看门狗原理(如果业务超长,会在运行期间自动给锁续上新的30秒)* 不要担心锁自动过期被删除* 加锁的业务完成,就不会续期,即使不手动解锁,锁也会在30秒之后自动解锁  所有不会有死锁问题*///        myLock.lock();//阻塞式等待myLock.lock(10, TimeUnit.SECONDS);//获取锁之后10秒之后自动解锁  不会自动续期  自动解锁时间一定要大于业务执行事件   注意使用try {//业务代码System.out.println("加锁成功 执行业务。。。。"+ Thread.currentThread().getId());Thread.sleep(20000);}catch (Exception e){}finally {//解锁System.out.println("释放锁。。。。"+ Thread.currentThread().getId());myLock.unlock();}return "hello";}

读写锁:保证一定能读到最新数据,修改期间写锁是一个排他锁

        如果都是读,则都会同时加锁成功,可以理解为无锁

        如果先写后读,则必须等待写锁释放才行

        如果同时写,也必须等待写锁释放才行,阻塞的方式、如何

        如果先读后写,也必须等待读锁释放

写锁:是一个互斥锁

读锁:是一个共享锁,和无锁是一样的

        

@ResponseBody  //因为返回的是json数据@GetMapping("/read")public String readValue(){//获取读写锁RReadWriteLock readWriteLock = redissonClient.getReadWriteLock("rw-Lock");String s = "";RLock rLock = readWriteLock.readLock();rLock.lock();try{s = redisTemplate.opsForValue().get("rwLock");}catch (Exception e){}finally {rLock.unlock();}return s;}@ResponseBody  //因为返回的是json数据@GetMapping("/write")public String writeValue(){//获取读写锁RReadWriteLock readWriteLock = redissonClient.getReadWriteLock("rw-Lock");RLock rLock = readWriteLock.writeLock();String s = UUID.randomUUID().toString();try{rLock.lock();redisTemplate.opsForValue().set("rwLock", s);Thread.sleep(30000);}catch (Exception e){}finally {rLock.unlock();}return s;}

 信号量:典型案例车库停车等。。。。

闭锁:案例放假 锁门 

 

 

http://www.lryc.cn/news/136569.html

相关文章:

  • 继承(C++)
  • 文心一言 VS 讯飞星火 VS chatgpt (80)-- 算法导论7.4 5题
  • SpringCloud 概述
  • Apache ShenYu 学习笔记一
  • uniapp 禁止遮罩层下的页面滚动
  • postgresql 分组
  • RT1052的EPWM
  • k8s 安装istio (一)
  • vue 项目在编译时,总是出现系统崩的状态,报错信息中有v7 或者 v8 的样式-项目太大内存溢出
  • 低功耗蓝牙射频指纹识别
  • 怎么检测UI卡顿?(线上及线下)
  • Git 常用操作
  • 前端修改新增操作导致数据删除——js精度丢失
  • winform使用usercontrol 构建了一个复杂的列表,列表速度慢该如何优化?
  • Lnton羚通算法算力云平台如何在OpenCV-Python中使用cvui库创建复选框
  • 中项系统集成项目管理知识点汇总
  • Docker容器:docker基础及网络
  • Django实现音乐网站 ⑿
  • ORB-SLAM2学习笔记10之图像关键帧KeyFrame
  • 【ownCloud】添加信任域
  • C++--类型转换
  • 在服务器上部署 Nginx 并设置图片服务器
  • 使用NXP GUI GUIDER生成的GUI移植到雅特力MCU平台过程详解(ST/GD/国民/极海通用)
  • JVM——配置常用参数,GC调优策略
  • 使用IDEA把Java程序打包成jar
  • 元宇宙和数字孪生的异同探究
  • 初识微服务
  • 数据库锁的分类 各种锁
  • MySQL数据库软件
  • 无涯教程-PHP - preg_match_all()函数