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实现分布式锁的方式,他们有什么区别的更多相关文章

  1. 【Redis】分布式锁RedLock

    普通实现 说道Redis分布式锁大部分人都会想到: 1.setnx+lua, 2.setkey value px milliseconds nx. - 获取锁(unique_value可以是UUID等 ...

  2. Java基于redis实现分布式锁(SpringBoot)

    前言 分布式锁,其实原理是就是多台机器,去争抢一个资源,谁争抢成功,那么谁就持有了这把锁,然后去执行后续的业务逻辑,执行完毕后,把锁释放掉. 可以通过多种途径实现分布式锁,例如利用数据库(mysql等 ...

  3. redis咋么实现分布式锁,redis分布式锁的实现方式,redis做分布式锁 积极正义的少年

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...

  4. Redis实现分布式锁的正确使用方式(java版本)

    Redis实现分布式锁的正确使用方式(java版本) 本文使用第三方开源组件Jedis实现Redis客户端,且只考虑Redis服务端单机部署的场景. 分布式锁一般有三种实现方式: 1. 数据库乐观锁: ...

  5. Redis分布式锁实现方式(附有正解及错误示例)

    一.前言 本文内容主要来自博客:https://wudashan.com/2017/10/23/Redis-Distributed-Lock-Implement/,本文用于归纳总结及笔记用途,如有需要 ...

  6. Redis: 分布式锁的正确实现方式(转)

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...

  7. 基于redis 实现分布式锁的方案

    在电商项目中,经常有秒杀这样的活动促销,在并发访问下,很容易出现上述问题.如果在库存操作上,加锁就可以避免库存卖超的问题.分布式锁使分布式系统之间同步访问共享资源的一种方式 基于redis实现分布式锁 ...

  8. 用Redis构建分布式锁-RedLock(真分布)

    在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现一个分布式锁管理器,但是这些库实现的方式差别很大,而且很多简单的实现其实只需采用稍微增 ...

  9. Redis实现分布式锁

    http://redis.io/topics/distlock 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现一个分布式锁管理器,但 ...

  10. 基于Redis实现分布式锁(1)

    转自:http://blog.csdn.net/ugg/article/details/41894947 背景在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等.大部 ...

随机推荐

  1. 代码随想录第三天 | 链表part01

    链表理论基础 建议:了解一下链表基础,以及链表和数组的区别 文章链接:https://programmercarl.com/链表理论基础.html 不是很了解链表和数组区别的可以先看看以上的文章. 2 ...

  2. 在Matlab中如何计算决定系数R^2和相关系数r

    Problem 当你使用 polyfit 函数进行多项式拟合之后,你希望计算决定系数或者相关系数看看拟合效果如何.聪明的你肯定觉得聪明的 Matlab 的 polyfit 函数的返回值中会有 \(R^ ...

  3. EasyMR 基于国产化信创的适配实践技术详解

    国产化信创,即采用国产信息技术产品和服务,构建自主可控的信息技术体系.近年来,随着国家对网络安全和信息安全的重视程度不断提高,国产化信创已经成为国家战略的重要组成部分,并呈现出以下大趋势: ● 政策驱 ...

  4. ArcObjects SDK 009 Map-Layer的结构

    1.Map-Layer主干结构 一个mxd文件可以包含多个地图,但我们常用的大部分都是包含一个地图.一个地图可以包含多个图层组和图层,而图层指向的则是实际数据.图层可以控制数据是否显示.显示样式.最大 ...

  5. Electron 办公党的摸鱼神器

    概要 俗话说水生金,摸鱼 = 水,得出定式摸鱼 ≈ 生金. 下面提到的项目我已经开源,发布在 gitee,检索 fish-ads-app 可以查看. 正文 前段时间刷小红薯看到一些将桌面背景改为客厅的 ...

  6. Oracle日期型及处理方法

    日期处理 获取当前日期-sysdate() sysdate()获取的日期精确到秒 为日期加上特定月份-add_months() select add_months(to_date('2010-2-27 ...

  7. 使用SWFTools将pdf转成swf

    1.下载swfTools并安装,下载地址http://www.swftools.org/download.html 2.复制代码到工具类中 1 ... 2 3 /** 4 * pdf转swf 5 * ...

  8. springBoot2.x启用https和兼容http

    前言之前我嫌弃tomcat(spring)项目,开启https麻烦,所以一直都是nginx代理为https.今儿突然不想了.在springBoot2.x的情况下,直接开启https,并兼容http方式 ...

  9. CF2092F Andryusha and CCB 题解

    CF2092F Andryusha and CCB CF 官解感觉跳了很多步啊,自己写一篇造福后人. 首先肯定是不能直接求的,考虑转化贡献体.对划分的段数转化贡献依旧不好求,考虑对每个子串的美感度转化 ...

  10. Win10专业版去除桌面快捷图标箭头的问题

    有深度技术的win10专业版用户,说他安装了几个软件程序,在桌面上的快捷访问图标,都会在图标左上角有个箭头,这看着很不习惯,说在win7旗舰版系统里面就不会出现这个箭头,这给人的感觉好不爽,想要删除那 ...