社区
高性能WEB开发
帖子详情
Redis setnx是原子性操作么
yongger520
2017-04-24 11:08:32
setnx应用在分布式加锁的场景
我有个问题
如果两个客户端连接一个Redis Server
同时
做setnx 会出现什么情况?
是一个成功一个失败么
...全文
3068
3
打赏
收藏
Redis setnx是原子性操作么
setnx应用在分布式加锁的场景 我有个问题 如果两个客户端连接一个Redis Server 同时做setnx 会出现什么情况? 是一个成功一个失败么
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jonhy.luo
2019-07-17
打赏
举报
回复
2
setnx是获取锁,再操作 因为redis本身是单例队列处理的,你再多高并发请求获取锁都是排队进行,也就是只有前边第一个获取成功,后边的都获取失败。 简单实现分布式锁的过程: A\B同时在业务中setnx来申请锁(高并发下重复提交场景),A申请到锁,进行业务操作,或者入库操作,完成操作后释放锁。 这时候B会有几种情况。 1、B申请锁的时候A还没释放锁,此时B申请失败,业务逻辑处理直接返回失败 2、B申请锁时候A已经释放了锁,B获得锁,这时候一般会查询数据库/缓存,根据全局唯一ID索引来确认该操作之前是否做过,做过了直接返回失败,否则将唯一索引入库。再执行业务操作释放锁。 这样就防止了多集群/高并发情况下,重复(重试)提交造成帐脏数据情况。
loren-encoding
2017-08-04
打赏
举报
回复
2
我也好奇,既然说setnx是应用于分布式锁,但是当两个线程同时调用setnx那会怎么样啊?setnx源码是加锁得吗?
Java程序师傅
2021-07-07
举报
回复
3
@loren-encoding
setnx就是简单的,没有key,才赋值,意思是A代码加锁,B就用不了,除非A事情干完,解锁,B才能用
如何利用
Redis
分布式锁实现控制并发
操作
redis
命令解释 说道
Redis
的分布式锁都是通过
set
Nx
命令结合get
set
来实现的,在讲之前我们先了解下
set
Nx
和get
set
的意思,在
redis
官网是这样解释的 注:
redis
的命令都是原子
操作
SET
NX
key value 将 key 的值设为 value ,当且仅当 key 不存在。 若给定的 key 已经存在,则
SET
NX
不做任何动作。
SET
NX
是『
SET
if Not eXists』(如果不存在,则
SET
)的简写。 可用版本: 1.0.0+ 时间复杂度: O(1) 返回值: 设置成功,返回 1 。 设置失败,返回 0 。
redis
> EXISTS job
Redis
SET
NX
:分布式锁与
原子性
操作
的核心
Redis
中的
SET
NX
命令(
Set
if Not Exists)是一种
原子性
操作
,用于在键不存在时设置值,常用于分布式锁和幂等性控制。其核心特性是保证并发环境下只有一个客户端能成功设置值(返回1),其他客户端失败(返回0)。典型应用包括分布式锁、防止重复
操作
和资源抢占。但早期方案存在死锁风险(无法自动释放锁)和过期时间设置非
原子性
问题。现代
Redis
推荐使用带
NX
和EX参数的
SET
命令替代,实现加锁与设置过期时间的原子
操作
,避免死锁。
SET
NX
虽被取代,但仍是理解分布式锁底层机制的关键。<|end▁
redis
set
nx
原子性
_技术篇 | 分布式锁漫游指南:
Redis
篇
题外话:标题来自于道格拉斯·亚当斯的经典科幻小说《银河系漫游指南》目前越来越多的应用使用负载均衡,以往传统单体应用单机部署的情况下使用的JAVA并发处理资源竞争方式(J.U.C或synchronized等)在集群部署中已经无法保证资源的安全访问。为什么需要分布式锁需要考虑以下情况:只允许一个客户端
操作
共享资源:这种情况下,对共享资源的
操作
一般是非幂等性
操作
。在这种情况下,如果出现多个客户...
Redis
SET
NX
命令:原子
操作
与分布式锁
在许多分布式系统中,数据的一致性和
原子性
是至关重要的。
Redis
作为一款高性能的键值存储系统,其提供的
SET
NX
命令在实现这一目标中扮演着关键角色。以下将围绕
Redis
知识点之
SET
NX
进行详细阐述。想象一个在线购物平台,用户在购物车中添加商品时,系统需要确保同一时间只有一个用户能够添加同一件商品。如果多个用户同时尝试添加同一商品,可能会导致商品数量错误,影响用户体验和系统数据的一致性。这时,
SET
NX
命令就能发挥其作用。
nx
set
怎么实现的
原子性
_
redis
set
nx
实现分布式锁
对于如何实现分布式锁,方法有不少,这里介绍下使用
redis
set
nx
的实现方式。java首先分析下为何
redis
set
nx
能实现分布式锁功能。
redis
第一
redis
自己相对于咱们的多实例分布式应用程序来讲,它是可全局共享的,每一个实例都能访问同一个
redis
服务器(有点废话了)。bash第二
redis
的操做都是
原子性
的。服务器第三 来看下
redis
的
set
nx
特色。分布式
Redis
...
高性能WEB开发
25,980
社区成员
4,366
社区内容
发帖
与我相关
我的任务
高性能WEB开发
高性能WEB开发
复制链接
扫一扫
分享
社区描述
高性能WEB开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章