redisson常用加锁方式

RLock lock = redissonClient.getLock("lock:order:" + order);和redissonDistributedLocker.tryLock("lock:order:" + order, TimeUnit.SECONDS, RedisLockKey.DEFAULT_WAIT_TIME, RedisLockKey.DEFAULT_HOLD_TIME);这两种加锁方式的区别如下:

  1. 基本的加锁方式 (RLock)

    RLock lock = redissonClient.getLock("lock:order:" + order);
    

    获取锁: 通过 redissonClient.getLock() 获取一个 RLock 对象,并且传入一个键(key),这个键可以是任何字符串。这里的键是 "lock:order:" + order,它通常是基于某个业务标识(比如订单号)来唯一标识锁的。这样,每个订单的锁就是唯一的,其他订单不会被影响。
    锁的操作: 可以使用 lock.lock() 来请求锁,lock.unlock() 来释放锁。它还支持带超时的锁,例如 lock.tryLock(long waitTime, long leaseTime, TimeUnit unit),这可以控制等待的时间和锁的持有时间。
    锁的特点: 这种方式是直接通过 Redisson API 操作锁的基础方式,较为简单和直接。

  2. 使用 RedissonDistributedLocker.tryLock()

    redissonDistributedLocker.tryLock("lock:order:" + order,TimeUnit.SECONDS,RedisLockKey.DEFAULT_WAIT_TIME,RedisLockKey.DEFAULT_HOLD_TIME);
    

    获取锁: redissonDistributedLocker 是一个封装了 Redisson 锁操作的工具类,它通常用于对锁的获取和释放进行更高层次的封装和抽象。tryLock 是尝试获取锁的方法,可以指定等待时间和锁持有时间。"lock:order:" + order作为锁的 key

    tryLock 方法通常有以下几个参数:
    锁的名称: 即锁的 key,这里传入了一个包含业务标识的值。
    等待时间: 即如果锁被占用,最多等待的时间,单位通常是秒或毫秒。
    持有时间: 获取到锁后,锁自动过期的时间,也就是锁的最大持有时间。即使操作没有结束,锁也会在这个时间后自动释放。
    单位: 时间单位,可以是秒、毫秒等。

    锁的操作: tryLock 会尝试获取锁,如果锁被占用,且没有在 DEFAULT_WAIT_TIME 规定的时间内成功获取锁,则会放弃,返回 false。如果获取成功,则锁会在 DEFAULT_HOLD_TIME 时间后自动释放。这个机制有助于避免死锁和长时间占用锁。

  3. 主要区别
    封装和简化:redissonDistributedLocker.tryLock() 是对 Redisson 锁操作的封装,提供了更高层次的 API,使得锁的操作更加简便且灵活,减少了需要手动处理的锁等待和持有时间等逻辑。相比之下,直接使用 RLock 的方法可能需要你手动处理更多的逻辑(如等待、超时等)。

锁的超时管理:

RLock 本身提供了 lock() 和 tryLock() 方法,可以通过 tryLock(long waitTime, long leaseTime, TimeUnit unit)来设置等待时间和锁持有时间。
redissonDistributedLocker.tryLock() 通过封装的方式,简化了这种超时管理,它会在超时后自动返回失败或自动释放锁,减少了代码的复杂度。

使用场景:

RLock 适用于你需要更多控制或者自定义逻辑的场景,比如需要自己处理锁等待时间、持有时间等。
redissonDistributedLocker 更适合在业务中封装常见的分布式锁操作,它提供了简单的 API 以便快速实现分布式锁,特别是当你有一套统一的锁处理逻辑时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go 微服务框架 | 路由实现

文章目录 不用框架实现web接口实现简单的路由实现分组路由支持不同的请求方式支持同一个路径的不同请求方式前缀树应用前缀树完善路由代码 不用框架实现web接口 // blog main.go 文件 package mainimport ("fmt""log""net/http" )func main() {…

zabbix中通过模板实现自动发现对tcp端口批量监控

主要为了解决监控大量端口,避免繁琐的重复操作监控项和触发器 诸位~ 仅供参考哈 自动发现监控参考地址: https://blog.csdn.net/qq_37510195/article/details/130893655 模板 首先创建一个模板 自定义名称和群组 创建自动发现规则 模板——自动发现——创建发现规则…

Mysql备忘记录

1、简介 Mysql操作经常忘记命令,本文将持续记录Mysql一些常用操作。 2、常见问题 2.1、忘记密码 # 1、首先停止Mysql服务 systemctl stop mysqld # windows 从任务管理器里面停 # 2、更改配置文件 my.cnf (windows是 ini文件) vim /etc/my.cnf 在[mysqld]下面添…

【蓝桥杯】15届JAVA研究生组F回文字符串

一、思路 1.这题去年考的时候想的是使用全排列进行尝试,实际不用这么麻烦,只用找到第一个和最后一个非特殊字符串的位置,然后分别向内检查是否对称,向外检查是否对称直到左指针小于0(可以通过添加使其对称) 2.至于如何找到第一个…

X 进制减法

题目链接: 思路: X进制数321怎么转换为十进制数为65?如下图: ①题目要求我们求 A - B 的最小值,对第 i 位,要求 A[i] - B[i] 的最小值,当进制越小的时候差值越小,但进制要比 max&…

java线程安全-单例模式-线程通信

首先看看单例模式的写法 首先我们先来回顾一下饿汉式单例模式: class Singleton{private static Singleton singletonnew Singleton();private Singleton(){}public static Singleton getInstrance(){return singleton;} } public class Test{public static void …

大数据技术之SPARK

Spark Core 什么是 RDD 代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合 弹性 存储的弹性:内存与磁盘的自动切换; 容错的弹性:数据丢失可以自动恢复; 计算的弹性:…

Go 语言范围 (Range)

Go 语言范围 (Range) Go 语言是一种静态强类型、编译型、并发型编程语言,由 Google 开发。它的简洁性和高效性使其成为众多开发者的首选。在 Go 语言中,range 是一个非常有用的关键字,用于遍历数组、切片、字符串以及通道(channe…

VUE中数据绑定之OptionAPI

<template> <div> 姓名:<input v-model="userName" /> {{ userName }} <br /> 薪水:<input type="number" v-model="salary" /> <br /> <button v-on:click="submit">提交</button>…

react动态路由

框架的权限控制&#xff08;在config.ts中配置&#xff09; export default {access: {}, }; 权限配置文件&#xff08;access.ts&#xff09; 新建 src/access.ts &#xff0c;在该文件中 export default 一个函数&#xff0c;定义用户拥有的权限 该文件需要返回一个 functi…

Android里面如何优化xml布局

在 Android 开发中&#xff0c;以下是系统化的优化方案&#xff0c;从基础到高级分层解析&#xff1a; 一、基础优化策略 1. 减少布局层级 问题&#xff1a;每增加一层布局&#xff0c;测量/布局时间增加 1-2ms 解决方案&#xff1a; <!-- 避免嵌套 --> <LinearLayo…

基于STM32、HAL库的IP6525S快充协议芯片简介及驱动程序设计

一、简介: IP6525S是一款高性能的同步降压DC-DC转换器芯片,具有以下特点: 输入电压范围:4.5V至32V 输出电压范围:0.8V至30V 最大输出电流:5A 效率高达95% 可编程开关频率(100kHz-1MHz) 支持PWM和PFM模式 内置过流保护、过温保护等功能 该芯片常用于工业控制、通信设备…

二分算法的入门笔记

二分查找 使用前提&#xff1a;有序。可理解为枚举的一种技巧。时间复杂度&#xff1a; l o g ( n ) log(n) log(n) 基础模版代码 使用时根据情景进行相应的变化。注意跳出条件and分支处理方式and返回答案&#xff0c;三者之间的配合&#xff0c;不要进入死循环。可以在模拟…

轻量级Java跨包调用(完全解耦)

Java函数式命令模式 轻量级跨包调用解耦方案&#xff0c;让跨包调用就像调用本地接口那样简单。适用与具有公共依赖的两个jar包&#xff0c;但是又不想相互引入对方作为依赖。 函数式命令模式&#xff0c;很好地实现了跨包调用解耦的目标&#xff0c;并且通过泛型JSON动态转换保…

离散数学问题集--问题5.9

问题 5.9 综合了计算机组成原理、数字逻辑和离散数学中的关键概念&#xff0c;旨在帮助学生理解二进制算术运算的硬件实现、逻辑门与算术运算的关系&#xff0c;以及如何使用数学方法来验证数字系统的正确性。它强调了从规范到实现再到验证的完整过程。 思想 函数抽象&#xf…

OpenLayers:海量图形渲染之矢量切片

最近由于在工作中涉及到了海量图形渲染的问题&#xff0c;因此我开始研究相关的解决方案。在咨询了许多朋友之后发现矢量切片似乎是行业内最常用的一种解决方案&#xff0c;于是我便开始研究它该如何使用。 一、什么是矢量切片 矢量切片按照我的理解就是用栅格切片的方式把矢…

神经网络入门—自定义网络

网络模型 定义一个两层网络 import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F# 定义神经网络模型 class Net(nn.Module):def __init__(self, init_x0.0):super().__init__()self.fc1 nn.Linear(1, 10)self.fc2 nn.Linear(…

无人机装调与测试

文章目录 前言一、无人机基本常识/预备知识&#xff08;一&#xff09;无人机飞行原理无人机硬件组成/各组件作用1.飞控2.GPS3.接收机4.电流计5.电调6.电机7.电池8.螺旋桨9.UBEC&#xff08;稳压模块&#xff09; &#xff08;二&#xff09;飞控硬件简介&#xff08;三&#x…

2024年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2024年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛&#xff08;China Undergraduate Mathematical Contest in Modeling&#xff09;是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动&#xff0c;目的在于激…

Linux入门指南:从零开始探索开源世界

&#x1f680; 前言 大家好&#xff01;今天我们来聊一聊Linux这个神奇的操作系统~ &#x1f916; 很多小伙伴可能觉得Linux是程序员专属&#xff0c;其实它早已渗透到我们生活的各个角落&#xff01;本文将带你了解Linux的诞生故事、发行版选择攻略、应用领域&#xff0c;还有…