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

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

使用示例:

RCountDownLatch countDownLatch = redisson.getCountDownLatch("door");
//设置闭锁条件
countDownLatch.trySetCount(5);
//闭锁完成前需等待
countDownLatch.await();

五、信号量,用于限流,可用于停车系统

使用示例:

//申请信号
RSemaphore park = redisson.getSemaphore("park");
//一辆车进来,申请一个车位,阻塞式
park.acquire();
//尝试申请,申请不到则放弃,不再等待
//boolean b = park.tryAcquire();

释放信号

RSemaphore park = redisson.getSemaphore("park");
//走一辆车,释放一个车位出来
park.release();

相关推荐

  1. Redisson知识

    2024-06-09 08:08:02       29 阅读
  2. Redisson

    2024-06-09 08:08:02       69 阅读
  3. Redisson

    2024-06-09 08:08:02       42 阅读
  4. Redisson

    2024-06-09 08:08:02       29 阅读
  5. Redisson配置

    2024-06-09 08:08:02       59 阅读
  6. Redisson出现问题总结

    2024-06-09 08:08:02       54 阅读
  7. Redisson的基本使用

    2024-06-09 08:08:02       55 阅读
  8. Redis - 分布式锁、Redisson

    2024-06-09 08:08:02       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 08:08:02       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 08:08:02       97 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 08:08:02       78 阅读
  4. Python语言-面向对象

    2024-06-09 08:08:02       88 阅读

热门阅读

  1. Linux进程基本概念

    2024-06-09 08:08:02       28 阅读
  2. 2024-06-08 问AI: 大语言模型中,思维链CoT是什么?

    2024-06-09 08:08:02       34 阅读
  3. 自然语言处理(NLP)—— 符号方法与符号语言

    2024-06-09 08:08:02       26 阅读
  4. git凭证

    git凭证

    2024-06-09 08:08:02      23 阅读
  5. Sass 使用指南:让 CSS 编程更高效、更强大

    2024-06-09 08:08:02       31 阅读
  6. AI学习指南机器学习篇-使用C4.5算法构建决策树

    2024-06-09 08:08:02       30 阅读
  7. Scala学习笔记9: 继承

    2024-06-09 08:08:02       28 阅读
  8. Tomcat部署及优化

    2024-06-09 08:08:02       25 阅读
  9. Hbase中Rowkey的设计方法

    2024-06-09 08:08:02       27 阅读