当前位置: 首页 > 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

相关文章:

使用Redis实现分布式锁

Hi, I’m Shendi 使用Redis实现分布式锁 需求场景 需要使用到分布式锁的场景非常多,例如抢单等并发场景,这里举一个例子。 有一个商品,限量出售100个,一个用户下单,数量就减少一个,当剩下最后一个时&…...

linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解

一 、根据端口号 查看文件的部署位置 1.1 使用查看端口号对应的进程信息 方式一 : 使用netstat命令 netstat -tuln | grep 端口号-t:显示TCP连接 -u:显示UDP连接 -l:仅显示监听状态的连接 -n:以数字形式显示端口…...

汽车标定技术--A2L格式分析

目录 1.A2L由来 2.A2L格式 2.1 PROJECT 2.2 MODULE中包含的内容 3. INCA和CANape兼容吗? 最近有朋友用Vector ASAP2Editor编译的A2L文件在INCA7.4中无法识别,我记得以前做的时候是可以识别的,难不成最近有什么变动吗?出于好…...

Linux操作系统使用及C高级编程-D9D10Linux 服务搭建与使用

TFTP服务器 TFTP(Trivial File Transfer Protocol)即简单文件传输协议,是TCP/IP协议中一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69 1、使用客户服务器方式和使用UDP数据…...

git下载安装配置及Git在Gitee上拉取和上传代码教程

一、Git下载安装和配置 Git是一个分布式版本控制系统,用于跟踪文件的变化并协作开发。以下是安装和配置Git的简单步骤: 安装Git 下载Git安装程序:Git下载地址。 运行安装程序,按照提示进行安装。 在安装过程中,选择…...

ospf路由选路及路由汇总

一、知识补充 1、ABR和ASBR 1.1 ABR ABR指的是边界路由,通常位于两个或多个区域之间,用于在不同的OSPF区域之间传递信息。当一个路由器同时连接到两个或多个区域时,它就成为了ABR,它需要维护每个区域的拓扑信息和路由表&#x…...

Oracle 11g 多数据库环境下的TDE设置

19c的TDE wallet的设置是在数据库中设置的,也就是粒度为数据库,因此不会有冲突。 而11g的设置是在sqlnet.ora中,因此有可能产生冲突。 这里先将一个重要概念,按照文档的说法,wallet是不能被数据库共享的。 If there …...

vue3使用pinia实现数据缓存

文章目录 前言一、pinia是什么?二、安装pinia三、注册pinia四、使用pinia定义数据及方法使用 优化如有启发,可点赞收藏哟~ 前言 vue2以前一直使用vuex实现状态管理 vue3之后推出了pinia… 一、pinia是什么? 直观、类型安全、轻便灵活的Vue …...

【CSS】min 和 max 函数(设置最大最小值)

文章目录 min() 函数:允许你从逗号分隔符表达式中选择一个最小值作为 CSS 的属性值 width: min(1vw, 4em, 80px);max() 函数:让你可以从一个逗号分隔的表达式列表中选择最大(正方向)的值作为属性的值 width: max(10vw, 4em, 80p…...

ip地址跟wifi有关系吗

​你可能已经听说过IP地址和Wi-Fi这两个词,但你有没有想过它们之间是否有关系呢?在这篇文章中,我们将深入探讨IP地址与Wi-Fi之间的密切联系。从基本概念到应用实例,虎观代理小二二将为您解答这个问题。 首先,让我们来了…...

[算法学习笔记](超全)概率与期望

引子 先来讲个故事 话说在神奇的OI大陆上,有一只paper mouse 有一天,它去商场购物,正好是11.11,商店有活动 它很荣幸被选上给1832抽奖 在抽奖箱里,有3个篮蓝球,12个红球 paper mouse能抽3次 蒟蒻的p…...

SpringCloud相关

文章目录 Gateway动态路由灰度策略 FeignRibbon SpringCloud五大组件分别对应(1)服务注册与发现(2)客服端负载均衡(3)断路器(4)服务网关(5)分布式配置 Gatewa…...

在 Linux 和 Windows 系统下查看 CUDA 和 cuDNN 版本的方法,包括使用 nvcc 命令

一直都比较头疼cuda与cudnn版本查看问题,两个系统不一样也不好查看,命令不通用 Linux 查看 CUDA 版本 方法一: nvcc --version或 nvcc -V如果 nvcc 没有安装,那么用方法二。 方法二: 去安装目录下查看&#xff…...

4.10每日一题(二元函数极值相关重要性质,反复学习)

...

idea项目中java类名出现带 j 小红点,如何解决?

目录 一、问题描述 二、问题解决方案 1、寻找异常问题 2、解决方案 2.1常规操作方法 2.2 快速操作方法 一、问题描述 一打开idea的java项目,发现所有的文件边上都有带J的大红点 虽然,在 git bash 中进行编译时无异常。 但是视觉上给人的感受就是…...

生产环境_移动目标轨迹压缩应用和算法处理-Douglas-Peucker轨迹压缩算法

场景: 我目前设计到的场景是:即在地图应用中,对GPS轨迹数据进行压缩,减少数据传输和存储开销,因为轨迹点太频繁了,占用空间太大,运行节点太慢了,经过小组讨论需要上这个算法&#x…...

HINSTANCE是什么?

HINSTANCE 就是 HMODULE:...

uniapp小程序定位;解决调试可以,发布不行的问题

遇见这个问题;一般情况就两种 1、域名配置问题; 2、隐私协议问题 当然,如果你的微信小程序定位接口没开启;定位也会有问题; 第一种,小程序一般是腾讯地图;所以一般都会用https://apis.map.qq.co…...

C++学习 --pair

目录 1, 什么是pair 2, 创建pair 2-1, 标准数据类型 2-2, 自定义数据类型 3, 查询元素 3-1, 标准数据类型 3-2, 自定义数据类型 1, 什么是pair 数据以键值对形式存放的容器&…...

Android Frgment中onActivityResult无效的问题

前言 最近在fragment中使用二维码扫描 发现拿不到onActivityResult返回 查了资料说是启动模式 或者是返回值为负数 断点调试 发现根本没走onActivityResult方法 问题 onActivityResult 在附属Activity中被拦截了 所以没有触发该方法 解决 在Fragment所依赖的Activity中执…...

微信数据安全警示:为什么PyWxDump项目被永久移除及其合规性启示

微信数据安全警示:为什么PyWxDump项目被永久移除及其合规性启示 【免费下载链接】PyWxDump 删库 项目地址: https://gitcode.com/GitHub_Trending/py/PyWxDump 在当今数字时代,数据安全和个人隐私保护已成为技术开发领域的核心议题。今天我们要探…...

观察Taotoken用量看板如何帮助个人开发者精打细算

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken用量看板如何帮助个人开发者精打细算 对于独立开发者和小型项目团队而言,在探索和应用大模型时&#xff0…...

3步解密微信聊天记录:WechatDecrypt工具实战指南

3步解密微信聊天记录:WechatDecrypt工具实战指南 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾因误删重要聊天记录而懊恼?或者想要备份珍贵的对话却无从下手&#xff1f…...

在Windows电脑上畅游酷安社区:Coolapk-UWP桌面客户端完全指南

在Windows电脑上畅游酷安社区:Coolapk-UWP桌面客户端完全指南 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP 你是否曾想过,在电脑大屏幕上也能像手机一样流畅浏览…...

终极指南:如何用Elasticvue轻松管理你的Elasticsearch集群

终极指南:如何用Elasticvue轻松管理你的Elasticsearch集群 【免费下载链接】elasticvue Elasticsearch gui - desktop app, browser extension, docker, self hosted 项目地址: https://gitcode.com/gh_mirrors/el/elasticvue Elasticsearch是当今最流行的分…...

企业级公司日常考勤系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 现代企业管理中,考勤管理是人力资源管理的核心环节之一,直接影响企业的运营效率和员工的工作积极性。传统考勤方式依赖人工记录,容易出现数据错误、效率低下等问题,难以满足企业精细化管理的需求。随着信息技术的快速发展&am…...

CANN/tensorflow迭代循环设置API

set_iteration_per_loop 【免费下载链接】tensorflow Ascend TensorFlow Adapter 项目地址: https://gitcode.com/cann/tensorflow 功能说明 设置sess.run模式下小循环次数,即每次sess.run()在Device侧执行训练迭代的次数,可以减少Host与Device间…...

如何让微信网页版重新可用?wechat-need-web插件完整安装指南

如何让微信网页版重新可用?wechat-need-web插件完整安装指南 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为无法在浏览器中使用微信…...

本地AI代理桥接器:统一调用多云端大模型的轻量级解决方案

1. 项目概述与核心价值最近在折腾一些本地AI应用和自动化流程时,遇到了一个挺典型的问题:我手头有一些功能强大的云端API服务,比如OpenAI的ChatGPT、Claude,或者一些图像生成模型,但出于数据隐私、网络延迟、成本控制或…...

隐私优先的本地化个人基因组分析工具:从SNP解析到多基因风险评分

1. 项目概述:一个隐私至上的本地化个人基因组分析工具如果你和我一样,对消费级基因检测(比如23andMe、AncestryDNA)的结果感到好奇,但又对把最私密的遗传数据上传到云端服务器心存疑虑,那么你一定会对wkyle…...