利用redis 加分布式锁

利用Redis对批量数据实现分布式锁 需求背景在开发的上有一个按钮,可以实现抓取结转表里面的多条数据进行归集操作。为了防止多人多电脑同时操作一条数据,我们自己开发了一个简单的基于Redis实现的分布式锁。代码实现逻辑代码中的使用案例参数说明::结转数据的ID主键集合。:最大锁超时时间(用于自动解锁):租户ID(这个参数根据情况选择是否需要) Redis加锁方法封装 getLockByIds批量获取每一条数据的Redis锁 解锁 实现效果当对数据进行批量加锁的时候,若在加锁的过程中出现加锁失败,则回滚直接加的锁,并提示"归集数据有 阅读详情

   分布式锁的实现方式有多种,例如: Mysql, Redis, Zookeeper,或者自研分布式锁比如谷歌的Chubby, 今天介绍如果用Redis实现分布式锁,笔者认为在java开发中,使用Reids 加锁方式比较方便容易上手,

前置条件:  安装Redis, 使用redisson 包或者maven依赖

封装一个  redissonUtil    主要方法有两个,一个是加锁的一个是解锁的

方法1: public boolean trylock(String lockName, long waitTime) {
    try {
        String key = RedisConstant.REDIS_LOCK_PRE + lockName;
        RLock lock = this.redissonClient.getLock(key);
        return lock.tryLock(waitTime, TimeUnit.MILLISECONDS);
    } catch (Exception var6) {
        log.error(StrUtil.format("tryLock fail!lockName={}", new Object[]{lockName}), var6);
        return false;
    }
}

方法2:

public void unlock(String lockName) {
    String key = RedisConstant.REDIS_LOCK_PRE + lockName;
    RLock lock = this.redissonClient.getLock(key);
    if (lock != null && lock.isHeldByCurrentThread()) {
        lock.unlock();
    }

}

新建一个SpringBoot Web项目,新建一个 Controller

以上的例子可以放到service层,这里为了演示方便。

Redis实战之 分布式锁 重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的。不可重试:是指目前的分布式只能尝试一次,我们认为合理的情况是:当线程在获得锁失败后,他应该能再次尝试获得锁。 阅读详情

相关推荐

从网口变压器到TVS管:手把手设计通过4KV浪涌的以太网电路

本文详细解析工业级以太网接口4KV浪涌防护设计,从网口变压器选型到TVS管布局,提供通过IEC61000-4-5标准测试的完整方案。重点介绍Bob Smith电路优化和PCB设计技巧,帮助工程师有效应对雷电感应和设备开关瞬态干扰,确保工业设备稳定运行。

study的专栏 287

这才叫细:带你深入理解Redis分布式锁

什么是分布式锁说到Redis,我们第一想到的功能就是可以缓存数据,除此之外,Redis因为单进程、性能高的特点,它还经常被用于做分布式锁。锁我们都知道,在程序中的作用就是同步工具,保证共...

weixin_43167418的博客 1210

UA-DETRAC数据集转YOLO格式

UA-DETRAC转YOLO

lafsca5的博客 9110

添加分布式锁的几种方式

定义 何为分布式锁? 对于锁大家肯定不会陌生,在 Java 中 synchronized 关键字和 ReentrantLock 可重入锁在我们的代码中是经常见的,一般我们用其在多线程环境中控制对资源的并发访问。 但是随着分布式的快速发展,本地的加锁往往不能满足我们的需要,在我们的分布式环境中上面加锁的方法就会失去作用。 于是人们为了在分布式环境中也能实现本地锁的效果,也是纷纷各出其招,今天让我们来...

碰壁先生的博客 2581

Plecs电力电子仿真专业教程-第一季 第一节 Plecs简介

Plces 电力电子仿真专业教程系列依托专业的电力电子仿真软件Plecs对各种电力电子常用的拓扑及实际设计的方案进行系统及仿真与软件代码仿真实践。通过对各种电路仿真原理的讲解及专业C语言代码程序的编写,提升学员的系统设计能力,软件编程能力与理论分析能力。

3648

QGIS003:【02标注工具栏】-标注的样式、放置和属性修改

摘要:文本介绍了QGIS标注的样式、放置和属性修改

qq_31762031的博客 1917

Java如何使用 Redis 实现分布式锁

通过 Redis 实现分布式锁是解决资源竞争问题的有效手段。互斥性:任何时刻,只有一个客户端能持有锁,确保资源独占访问。死锁预防:通过设置过期时间,确保锁即使因客户端异常也能被释放。解锁准确性:加锁和解锁必须由同一个客户端完成,防止误删他人的锁。操作原子性:通过 LUA 脚本将获取锁和释放锁的逻辑封装为原子操作,避免竞态条件。通过 setnx命令配合过期时间UUID 标识以及LUA 脚本,我们可以实现一个高效可靠的分布式锁机制,适用于多种高并发场景。

Takumilove的博客 1611

华为OD机考真题 新系统 - 小菊的寻宝之旅(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【小菊的寻宝之旅】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【小菊的寻宝之旅】多语言题解。

qq_45776114的博客 626

Redis实现分布式锁(单机版)

一、前言   在我们日常工作中,除了Spring和Mybatis外,用到最多无外乎分布式缓存框架——Redis。但是很多工作很多年的朋友对Redis还处于一个最基础的使用和认识。所以我就像把自己对分布式缓存的一些理解和应用整理一个系列,希望可以帮助到大家加深对Redis的理解。本系列的文章思路先从Redis的应用开始。再解析Redis的内部实现原理。最后以经常会问到Redist相关的面试题为结尾。...

qq_28326489的博客 449

【固态变压器(SST)全维度解析】发展历史、技术、玩家、挑战与数据中心趋势

SST正处于技术突破向规模化商用的关键过渡期,随着SiC/GaN器件降价、标准完善、可靠性数据积累,其在数据中心的渗透率将快速提升。短期(2025 - 2027年)以示范项目为主,中长期(2030年后)有望成为超大规模智算中心的主流供电方案。

昔时扬尘处 2128

西南科技大学数字电子技术实验七(4行串行累加器设计及FPGA实现)FPGA部分

/在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入0,并在k=0时运算。三、程序清单(每条语句必须包括注释或在开发窗口注释后截图)四、综合、管脚分配、生成输出文件、下载(所有步骤截图)五、仿真程序清单、波形(波形截图必做,截图!.k(k),//开关。

Welcome To My6n Blog 4333

SpringBoot框架如何整合Redis缓存技术?实现分布式锁

分布式锁的实现需要考虑以下几个关键因素:锁的安全性、性能、可扩展性和容错性。安全性是指锁能够正确地保护共享资源,防止多个节点同时访问。性能是指锁的获取和释放操作应该尽可能快,以减少等待时间。

编程小风筝的博客 790

云端办公文件存储与访问全攻略:选型、预算、实操一本通

随着远程办公、多设备协作成为常态,“文件云端存储、随时调用” 已成为提升办公效率的核心需求。本文从用户实际场景出发,系统拆解云端存储的选型逻辑、全场景费用预算,重点解答 “文件能否直接在线打开” 的核心疑问,并提供实操技巧与安全保障方案,覆盖个人、小团队(含兼职)、企业全维度需求,帮助不同规模用户快速搭建高效、低成本的云端办公体系。

hy行者勇哥的博客 1241

分布式锁

1.分布式锁条件 为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能...

Re:夜 的博客 247

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

redis分布式锁

前言 分布式锁的选择,目前市面上使用最广的就是redis和zookeeper,这两种实现都有各自的有点。 zookeeper:可用性高,性能低,并发低。 redis:性能高,可用性中等,并发高 根据业务场景选择合适的技术实现,下面通过应用redis的特性,实现分布式锁。 业务开发相关要求 与业务代码低耦合,侵入性低。 使用方便,简单 组件开发 实现原理 利用redis的串行操作特点,将相关的锁设置key,给key设置过期时间。编写为一个luna脚本,实现一体操作。 redislock相关开源

wliang578的博客 334

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

redis实现分布式锁|数据库实现分布式锁|zookeeper实现分布式锁

分布式锁:当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。有这样一个情境,线程A和线程B都共享某个变量X。如果是单机情况下(单JVM),线程之间共享内存,只要使用线程锁就可以解决并发问题。如果是分布式情况下(多JVM),线程A和线程B很可能不是在同一JVM中,这样线程锁就无法起到作用了,这时候就要用到分布式锁来解决。再例如火车站抢票问题,也可以使用分布式锁,大量线程进来抢票,使用分布式锁,来达到每张票只有一个人能抢到,购买到票后就立即释放锁。为了确保分布式锁可用,我们至少要确保锁的实现同时满

zouyang920的博客 159

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Redis实现分布式锁

在多线程并发的情况下,我们可以使用锁来保证一个代码块在同一时间内只能由一个线程访问。比如Java的synchronized关键字和Reentrantlock类等等。 这样子可以保证在同一个JVM进程内的多个线程同步执行。 如果在分布式的集群环境中,如何保证不同节点的线程同步执行呢? 怎么才能在分布式系统中,实现不同线程对代码和资源的同步访问? 对于单进程的并发场景,我们可以使用语言...

forever-and-ever的博客 4万+

Redis的分布式锁分析

开发同学都知道,在分布式系统中,为了保证多个机器并发操作的数据一致性,常常需要使用分布式锁机制。常用的比如数据库锁,ZK锁,Reis锁等等,今天我们就探讨下Redis分布式锁,说说他的实现原理和应用场景,并介绍如何正确使用分布式锁来解决并发问题

战斧的博客 7304

redis实现分布式锁的原理

redis实现分布式锁,从原理的实现,干货满满~~~

LYQ20010417的博客 1万+

[Redis] 基于redis的分布式锁

前言 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他...

1.02^365的成长裂变 3万+

Redis的分布式锁

Redis分布式锁通过Redis原子操作实现互斥访问,核心是SETNX命令设置带过期时间的键值对,配合Lua脚本确保安全释放。Java实现可通过Jedis手动处理锁获取、唯一标识验证和释放逻辑,或使用Redisson简化开发,其提供自动续期、可重入锁等功能。Redlock算法支持多节点部署提高可靠性。注意事项包括合理设置锁超时、确保原子操作、处理时钟漂移等。适用于秒杀、任务调度等需要互斥访问的场景,Jedis适合简单需求,Redisson更适合复杂场景,能显著降低开发复杂度。

Hzx895554135的博客 2711

Redis分布式锁实现

如果负责储存这个分布式锁的Redisson节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。

учёба 2419

Redis分布式锁原理(一)——redis分布式锁需要注意的问题

1、什么场景会用到分布式锁(用本地锁举例,分布式场景在并发情况下存在的问题) 2、redis为什么可以实现分布式锁 3、假设一分布式场景,运用redis分布式锁并剖析各种坑 结合视频157、158

齐天小圣^O^ 的博客 2917
上一篇: 医疗陪诊小程序前后端源码
下一篇: AI赋能:I中医临床诊疗智能辅助系统
breakwhile2
博客等级 码龄18年 26粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值