Redisson知识

news/2024/10/18 10:14:32/

使用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();


http://www.ppmy.cn/news/1469062.html

相关文章

神经网络 torch.nn---nn.LSTM()

torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) LSTM — PyTorch 2.3 documentation LSTM层的作用 LSTM层:长短时记忆网络层,它的主要作用是对输入序列进行处理,对序列中的每个元素进行编码并保存它们的状态,以便后续的处理。 …

三端植物大战僵尸杂交版来了

Hi,好久不见,最近植物大战僵尸杂交版蛮火的 那今天苏音整理给大家三端的植物大战僵尸杂交版包括【苹果端、电脑端、安卓端】 想要下载的直接划到最下方即可下载。 植物大战僵尸,作为一款古老的单机游戏,近期随着B站一位UP主潜艇…

30、 shell脚本进阶

shell脚本ifcase 一、条件测试 1.1、条件测试:$?----返回码,判断命令或者脚本是否执行成功(最近的一条) 0 true 为真就是成功 成立 非0 false 失败或者异常。 二、test命令 test命令:可以进行条件测试&#xff…

Java中的Lambda表达式及其应用

Lambda表达式是Java 8引入的一种新特性,使得Java语言更加简洁和易于使用。通过Lambda表达式,可以更简洁地表示匿名函数,并实现函数式编程风格。本文将详细介绍Java中的Lambda表达式及其实际应用场景。 一、Lambda表达式简介 Lambda表达式是一种匿名函数,可以看作是简洁的…

SAP ERP系统ABAP数据字典详细介绍

1.1 ABAP字典简介 ABAP字典是SAP系统的核心组件之一,它是一个集中存储和管理数据对象、定义和关系的数据库。这些数据对象包括数据元素、域、表格、视图等。ABAP字典为开发人员提供了一个统一的平台,用于创建、修改和维护这些对象,从而确保数…

Laravel框架概述、关键组件、使用技巧

在PHP面试中,Laravel框架是一个经常被提及的话题。以下是对Laravel框架的详细解释,以满足您提出的清晰、分点表示和归纳的要求,并尽量参考了文章中的相关数字和信息。 Laravel框架概述 定义:Laravel是一个开源的PHP Web框架&…

netsh命令添加https证书绑定报错:未能添加SSL证书,错误1312 指定的登录会话不存在。可能已被终止。

1.winr打开运行,输入mmc 2.在控制台1[控制台根节点]->文件->添加/删除....->选择证书->添加-选择计算机账户->完成->确认 3.找到证书文件,双击安装->选择本地计算机->手动选择路径(放到中间证书机构,如果是个人生成的证书&…

AI小说推文工具文刻AI创作工具

文刻AI创作工具是一种基于人工智能技术的创作工具,旨在帮助用户快速生成各种文本内容。这个工具通过深度学习模型和自然语言处理技术,能够理解用户提供的输入信息,并生成符合要求的文本作品。点击下载 文刻AI创作工具可以用于各种场景&#x…