当前位置: 首页 > news >正文

使用Redis实现分布式锁


Hi, I’m Shendi


使用Redis实现分布式锁




需求场景

需要使用到分布式锁的场景非常多,例如抢单等并发场景,这里举一个例子。

有一个商品,限量出售100个,一个用户下单,数量就减少一个,当剩下最后一个时,用户A与用户B同时下单,同时查询剩余数量,得到为1,那么实际出售数量为101,而非100。这个时候就需要使用到分布式锁



Redis实现分布式锁

Redis是基于单线程的,这意味着所有来自客户端的命令都是顺序执行的,因此不必担心Redis内部的并发问题。

最常用的是使用 SETNX (SET if Not Exists)来实现分布式锁,这个命令当key不存在时才设置,并返回1,存在则不设置,并返回0。

为了避免死锁,还会设置超时时间(Expire),即使程序挂掉,没有释放锁,也会在指定时间后自动销毁锁。

SETNX k v
EXPIRE k 10

但这种操作并不是原子性的,比如执行 EXPIRE 时出错,就会导致死锁。


在Redis2.6.12版本后,扩展了SET命令,可以像下面这样实现分布式锁。

SET 键 值 NX PX 超时毫秒

使用示例如下

在这里插入图片描述


可以看到,当没有数据的时候,设置返回 OK,有数据,设置返回null,并且不会更改已有数据的超时时间


剩下的就是在代码中使用Redis了,不同语言使用方法不同,这里就不列出来了。




END

http://www.lryc.cn/news/237694.html

相关文章:

  • linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解
  • 汽车标定技术--A2L格式分析
  • Linux操作系统使用及C高级编程-D9D10Linux 服务搭建与使用
  • git下载安装配置及Git在Gitee上拉取和上传代码教程
  • ospf路由选路及路由汇总
  • Oracle 11g 多数据库环境下的TDE设置
  • vue3使用pinia实现数据缓存
  • 【CSS】min 和 max 函数(设置最大最小值)
  • ip地址跟wifi有关系吗
  • [算法学习笔记](超全)概率与期望
  • SpringCloud相关
  • 在 Linux 和 Windows 系统下查看 CUDA 和 cuDNN 版本的方法,包括使用 nvcc 命令
  • 4.10每日一题(二元函数极值相关重要性质,反复学习)
  • idea项目中java类名出现带 j 小红点,如何解决?
  • 生产环境_移动目标轨迹压缩应用和算法处理-Douglas-Peucker轨迹压缩算法
  • HINSTANCE是什么?
  • uniapp小程序定位;解决调试可以,发布不行的问题
  • C++学习 --pair
  • Android Frgment中onActivityResult无效的问题
  • 【C#二开业务冠邑】通过界面查看数据来源
  • 使用大语言模型 LLM 做文本分析
  • Windows本地搭建rtmp推流服务
  • 机器学习二元分类 二元交叉熵 二元分类例子
  • Postgresql运维信息(一)
  • Jupyter Notebook的下载安装与使用教程_Python数据分析与可视化
  • 快速入门:构建您的第一个 .NET Aspire 应用程序
  • 主流开源大语言模型的微调方法
  • Django DRF权限组件
  • leetcode每日一题31
  • 使用Pytorch测试cuda设备的性能(单卡或多卡并行)