redis实现分布式锁的方式,他们有什么区别
SETNX
使用方法:SETNX(SET if Not eXists)是 Redis 中一个经典的用于设置分布式锁的命令。它的作用是当指定的键不存在时,才会设置该键的值,如果键已经存在则不做任何操作。但 SETNX 本身不支持直接设置过期时间。
坏处:为了避免死锁(例如持有锁的客户端崩溃而未释放锁),需要额外使用 EXPIRE 命令来为锁设置过期时间。然而,SETNX 和 EXPIRE 是两个独立的命令,在高并发场景下,可能会出现 SETNX 执行成功,但在执行 EXPIRE 之前客户端崩溃的情况,这样就会导致锁没有设置过期时间。他们不是一个原子操作。
setIfAbsent
使用方法:setIfAbsent(key, value, expireTime, TimeUnit.SECONDS) 是 Spring Data Redis 对 Redis 中 SET key value NX PX timeout 命令的封装。这个命令将设置键值对、判断键是否存在以及设置过期时间这三个操作合并为一个原子操作。
Redisson 实现分布式锁
使用方法:开发者只需创建 RLock 对象,调用 lock() 或 tryLock() 方法获取锁,调用 unlock() 方法释放锁,无需关心底层的 Redis 命令和复杂的实现细节。
redission锁的好处
功能特性丰富
1、可重入锁:Redisson 支持可重入锁,即同一个线程可以多次获取同一把锁,而不会产生死锁。这在一些复杂的业务逻辑中非常有用,例如递归调用时可以安全地使用锁。
2、公平锁:提供公平锁的实现,保证线程按照请求锁的顺序依次获得锁,避免某些线程长时间得不到锁的情况,适用于对锁获取顺序有严格要求的场景。
3、联锁和红锁:支持联锁(MultiLock)和红锁(RedLock)。联锁可以将多个锁作为一个整体进行加锁和解锁操作;红锁用于在多个 Redis 节点上实现高可用的分布式锁,提高了锁的可靠性。
自动续期机制
Redisson 实现了锁的自动续期机制,当持有锁的线程在执行任务过程中,若锁的过期时间快到了,Redisson 会自动延长锁的过期时间,避免因业务逻辑执行时间过长导致锁提前释放,从而保证业务逻辑的原子性。
异常处理和可靠性
Redisson 对异常情况进行了良好的处理,例如在获取锁或释放锁时出现网络异常等情况,会有相应的重试机制和错误处理逻辑,提高了系统的可靠性。
redis实现分布式锁的方式,他们有什么区别的更多相关文章
- 【Redis】分布式锁RedLock
普通实现 说道Redis分布式锁大部分人都会想到: 1.setnx+lua, 2.setkey value px milliseconds nx. - 获取锁(unique_value可以是UUID等 ...
- Java基于redis实现分布式锁(SpringBoot)
前言 分布式锁,其实原理是就是多台机器,去争抢一个资源,谁争抢成功,那么谁就持有了这把锁,然后去执行后续的业务逻辑,执行完毕后,把锁释放掉. 可以通过多种途径实现分布式锁,例如利用数据库(mysql等 ...
- redis咋么实现分布式锁,redis分布式锁的实现方式,redis做分布式锁 积极正义的少年
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...
- Redis实现分布式锁的正确使用方式(java版本)
Redis实现分布式锁的正确使用方式(java版本) 本文使用第三方开源组件Jedis实现Redis客户端,且只考虑Redis服务端单机部署的场景. 分布式锁一般有三种实现方式: 1. 数据库乐观锁: ...
- Redis分布式锁实现方式(附有正解及错误示例)
一.前言 本文内容主要来自博客:https://wudashan.com/2017/10/23/Redis-Distributed-Lock-Implement/,本文用于归纳总结及笔记用途,如有需要 ...
- Redis: 分布式锁的正确实现方式(转)
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...
- 基于redis 实现分布式锁的方案
在电商项目中,经常有秒杀这样的活动促销,在并发访问下,很容易出现上述问题.如果在库存操作上,加锁就可以避免库存卖超的问题.分布式锁使分布式系统之间同步访问共享资源的一种方式 基于redis实现分布式锁 ...
- 用Redis构建分布式锁-RedLock(真分布)
在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现一个分布式锁管理器,但是这些库实现的方式差别很大,而且很多简单的实现其实只需采用稍微增 ...
- Redis实现分布式锁
http://redis.io/topics/distlock 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现一个分布式锁管理器,但 ...
- 基于Redis实现分布式锁(1)
转自:http://blog.csdn.net/ugg/article/details/41894947 背景在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等.大部 ...
随机推荐
- 代码随想录第三天 | 链表part01
链表理论基础 建议:了解一下链表基础,以及链表和数组的区别 文章链接:https://programmercarl.com/链表理论基础.html 不是很了解链表和数组区别的可以先看看以上的文章. 2 ...
- 在Matlab中如何计算决定系数R^2和相关系数r
Problem 当你使用 polyfit 函数进行多项式拟合之后,你希望计算决定系数或者相关系数看看拟合效果如何.聪明的你肯定觉得聪明的 Matlab 的 polyfit 函数的返回值中会有 \(R^ ...
- EasyMR 基于国产化信创的适配实践技术详解
国产化信创,即采用国产信息技术产品和服务,构建自主可控的信息技术体系.近年来,随着国家对网络安全和信息安全的重视程度不断提高,国产化信创已经成为国家战略的重要组成部分,并呈现出以下大趋势: ● 政策驱 ...
- ArcObjects SDK 009 Map-Layer的结构
1.Map-Layer主干结构 一个mxd文件可以包含多个地图,但我们常用的大部分都是包含一个地图.一个地图可以包含多个图层组和图层,而图层指向的则是实际数据.图层可以控制数据是否显示.显示样式.最大 ...
- Electron 办公党的摸鱼神器
概要 俗话说水生金,摸鱼 = 水,得出定式摸鱼 ≈ 生金. 下面提到的项目我已经开源,发布在 gitee,检索 fish-ads-app 可以查看. 正文 前段时间刷小红薯看到一些将桌面背景改为客厅的 ...
- Oracle日期型及处理方法
日期处理 获取当前日期-sysdate() sysdate()获取的日期精确到秒 为日期加上特定月份-add_months() select add_months(to_date('2010-2-27 ...
- 使用SWFTools将pdf转成swf
1.下载swfTools并安装,下载地址http://www.swftools.org/download.html 2.复制代码到工具类中 1 ... 2 3 /** 4 * pdf转swf 5 * ...
- springBoot2.x启用https和兼容http
前言之前我嫌弃tomcat(spring)项目,开启https麻烦,所以一直都是nginx代理为https.今儿突然不想了.在springBoot2.x的情况下,直接开启https,并兼容http方式 ...
- CF2092F Andryusha and CCB 题解
CF2092F Andryusha and CCB CF 官解感觉跳了很多步啊,自己写一篇造福后人. 首先肯定是不能直接求的,考虑转化贡献体.对划分的段数转化贡献依旧不好求,考虑对每个子串的美感度转化 ...
- Win10专业版去除桌面快捷图标箭头的问题
有深度技术的win10专业版用户,说他安装了几个软件程序,在桌面上的快捷访问图标,都会在图标左上角有个箭头,这看着很不习惯,说在win7旗舰版系统里面就不会出现这个箭头,这给人的感觉好不爽,想要删除那 ...