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

Redisson知识

使用Redission获取锁

RLock lock = redisson.getLock("my-lock");

一、Redisson使用不指定锁过期时间的方式加锁:

lock.lock();

特点:

1.使用Redisson加的锁,具有自动续期机制,如果业务运行时间较长,运行期间会自动给锁续期,默认加锁时间都是30秒(LockWatchDogTimeOut:看门狗的默认时间),不用担心业务执行时间长,锁默认在30S以后被自动删掉;

2.加锁的业务只要运行完成,就不会给当前锁续期,即使不手动解锁,锁转为在设置的过期时间到来后自动删除;

3.如果占锁成功,就会启动一个定时任务【重新给锁设定过期时间,新的过期时间就是看门狗的默认时间】,每隔10s自动执行

总结:有看门狗机制,自动给锁续期续期;

二、lock方法里指定过期时间来加锁

lock.lock(10, TimeUnit.SECONDS);

特点:

1.在指定的时间到来时自动解锁,设置的过期时间一定要大于业务执行时间(需要实际测试得出);

2.过期时间到了后,不会自动续期;

3.如果传递了锁的过期时间,就发给redis的lua执行成本,进行占锁,默认过期时间就是我们指定的时间;

总结:没有看门狗机制,到期自动删除锁;

推荐:使用lock.lock(10, TimeUnit.SECONDS);加锁。

三、读写锁

//获取写锁:
RReadWriteLock readWriteLock = redisson.getReadWriteLock("rw-lock");
RLock rLock = readWriteLock.writeLock();

获取读锁:

RReadWriteLock readWriteLock = redisson.getReadWriteLock("rw-lock");
RLock rLock = readWriteLock.readLock();

特点:

1.锁用于保证一定能读到最新数据,修改期间,写锁是个互斥锁,排他锁,锁未释放,读锁和其他写锁均需等待;

2.读锁是共享锁,在各个读锁之间相当于无锁,可以并发读,只会在redis中记录好,所有当前的读锁,他们都会同时加锁成功,但是在读写锁并行,且读锁操作在前,写锁在后,写锁也需等待。

四、闭锁RCountDownLatch

闭锁:设置闭锁后,在设置的条件生效期间,锁会一值等待,直到设置的条件满足了,才释放锁。

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

相关文章:

  • 0103__【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
  • 如何把几个pdf文件合成在一个pdf文件
  • Stream与MLC测试CPU内存DDR5的原理与方法详解
  • linux业务代码性能优化点
  • Shell脚本学习_字符串变量
  • spring-kafka-生产者服务搭建测试(SpringBoot整合Kafka)
  • JVM学习-内存泄漏
  • Go微服务: 分布式之通过本地消息实现最终一致性和最大努力通知方案
  • BC C language
  • 算法训练营第四十九天 | LeetCode 139单词拆分
  • 阿里云一键登录号码认证服务
  • 【UML用户指南】-05-对基本结构建模-类
  • 【C++ 初阶】引用 () 实际的一些用法、常引用问题 详解!
  • adb dump当前可见的窗口
  • Java Web学习笔记27——对话框、表单组件
  • 使用vue3+ts封装一个Slider滑块组件
  • 关于科技的总结与思考
  • 2024年几款优秀的SQL IDE优缺点分析
  • vue前端实现页面禁止缩放 前端适配问题处理 前端项目多端适配解决方案
  • 反射型xss靶场练习
  • vue3 【实战】封装 “心跳“ 组件
  • k8s网络问题以及容器跨宿主机通信原理
  • BM25算法以及变种算法简介
  • D455相机RGB与深度图像对齐,缓解相机无效区域的问题
  • 2024 cicsn ezbuf
  • 地面站Mission planner
  • 常见的api: BigInteger
  • Overall timing accuracy 和Edge placement accuracy 理解
  • 2024 vite 静态 scp2 自动化部署
  • 【数据结构】AVLTree实现详解